問題は、Pythonのコードが、次のように読み込むことです:
if (number is "1") or "0" or "2":
空でない文字列はTrue
と評価され、常にTrue
です。 、あなたが何をしたいの素敵な構文を行うに
は次のとおりです。
if number in {"1", "0", "2"}:
は、ここで設定したの私の使用に注意してください - それは(3つの値のみを持つ)この場合はあまり問題ではありませんがチェック集合に対するメンバシップ・テストはO(n)ではなくO(1)であるため、集合に対してはリストより高速です。
これは単によりよい、これを書くのが容易:あなたが望んで
if number == "1" or number == "0" or number == "2":
。
メモ値を比較するときは、必ず==
を使用しないでください。is
- is
は同一性チェックです(2つの値は同じオブジェクトです)。一般的にis True
やis None
のようなものにはis
を使用してください。
あなたは数としてこれを処理したい場合は、このような何か行うことができます:あなたは数字の広い範囲に比較したい状況で、より有用である可能性
try:
value = int(number)
except ValueError:
value = None
if value is not None and 0 <= value <= 2:
...
を。 Pythonの便利な比較チェイン(0 <= value and value <= 2
ではなく0 <= value <= 2
)を使用していることに注意してください。
set literal(Python 2.7以降で利用可能)の場合は+1、 'is'を使用した文字列比較の警告の場合は+1。 – modocache
ありがとうございました...特に最後のメモのために、私はそれを知らなかった。 –