2016-10-30 13 views
1

私は現在、正と負のバイナリ入力が可能なバイナリ電卓を作成中です。どちらかの番号が負の両方ではなく、最終的な文字列は負の符号を持つことになります場合は、だから、明らかにIF文の2つの条件に対して排他的論理和演算を実行するためのきれいな方法はありますか?

if (firstvalue[0] == "-" and not secondvalue[0] == "-") or (secondvalue[0] == "-" and not firstvalue[0] == "-"): 
    invertedbinary.append("-") 

:私は私の質問については、次のコードを持っています。それ以外の場合は、両方とも正であり、文字列に負の符号はありません。

これを行うためのより良い方法があるかどうかは疑問です。私は^を使用してみましたが、私はそのビット演算子を推測します。

if firstvalue[0] == "-"^secondvalue[0] == "-":

私もオフのチャンスはなく、明らかに運の包みxorを試してみました。これを行うためのより良い方法に関する提案はありますか?

if (firstvalue[0] == "-")^(secondvalue[0] == "-"): 

あなたはまた、^の代わりに!=を使用することができます。

答えて

5

^あなたは括弧を使用している場合はうまく動作します。これはまったく同じ方法で動作しますが、少しはっきりしているかもしれません。 ^を覚えておく

+0

はああ男、私は何かを明らかに逃した信じることができないので、

from operator import xor as xor_ from functools import reduce def xor(*args): return reduce(xor_, map(bool, args)) if xor(firstvalue[0] == '-', secondvalue[0] == '-'): ... 

これは、あまりにも任意の値の数、および非ブール値のために動作します。それを見つけてくれてありがとう! –

1

ことの一つは、式のいずれかが、非ブール値であれば、それは予期しない動作をすることです:a^bがあれば(a and not b) or (b and not a)等しく、a = 5b = 2を言っていません!


xorが短絡することができないので、あなたにも機能を使用することができます。あなたがxor(1, 1, 1, 1) = 0を行うことができますし、xor(1, 1, 1, 1, 1) = 1

関連する問題