問題は、Pythonに対するコードが次のように読み取られることです。
if (number is "1") or "0" or "2":
また、空でない文字列はに評価されるためTrue
、常に。になりTrue
ます。
やりたいことをするための良い構文は次のとおりです。
if number in {"1", "0", "2"}:
ここでのセットの使用に注意してください-この場合(3つの値のみ)はそれほど重要ではありませんが、セットのメンバーシップテストはOではなくO(1)であるため、セットに対するチェックはリストよりも高速です(n)。
これは、これを書くのがより良くて簡単です:
if number == "1" or number == "0" or number == "2":
それはあなたが望んでいたものです。
値を比較するときは、常に使用し==
ないis
でis
ください。これはIDチェックです(2つの値は同じオブジェクトです)。通常、またはis
のようなものに使用する必要があります。is True
is None
これを数値として処理したい場合は、次のようにすることができます。
try:
value = int(number)
except ValueError:
value = None
if value is not None and 0 <= value <= 2:
...
これは、広範囲の数値と比較したい状況でより役立つ可能性があります。Pythonの便利な比較チェーン(0 <= value <= 2
ではなく0 <= value and value <= 2
)を使用していることに注意してください。