12

異なるトリガーでステートメントを複数回書き直さずに、複数の条件からトリガーするifステートメントを取得しようとしています。例えば:

if user_input == "look":  
    print description


if user_input == "look around":
    print description

それらをどのように1つのステートメントに凝縮しますか?

'または'を使用してみましたが、入力がいずれかの条件に一致したかどうかに関係なく、raw_inputによってステートメントがトリガーされました。

if user_input == "look" or "look around":  
    print description
4

2 に答える 2

13

あなたがやろうとしていることは

if user_input == "look" or user_input == "look around":
    print description

多くの可能性がある場合の別のオプション:

if user_input in ("look", "look around"):
    print description

2.7を使用しているので、次のように書くこともできます(2.7または3以降では機能しますが、2.6以下では機能しません)。

if user_input in {"look", "look around"}:
    print description

これにより、set要素が作成され、検索がわずかに高速になります(ただし、チェックする要素の数が2よりはるかに多い場合にのみ問題になります)。


あなたの最初の試みがいつも経験した理由はこれです。Pythonのほとんどのものは評価されます( 、、、または空の文字列、リスト、辞書などをTrue除く)。2つのことを取り、それらをブール値として評価します。したがって、;のように扱われます。最初のものが偽の場合、それはあなたが書いたようなものであり、それは常に通過します。FalseNoneoruser_input == "look" or "look around"(user_input == "look") or "look_around"if "look_around":

于 2012-09-08T23:51:39.727 に答える
3

オプションのセクションを持つパターンに従う場合は、正規表現を使用して文字列を照合するか、配列ルックアップを実行できます。

if user_input in ["look", "look around"]:
    print description

ブール演算子orはブール値でのみ機能し、両側の式をTrue評価し、式の1つがに評価された場合に戻りますTrue。自然言語とは何の関係もありません」

于 2012-09-08T23:52:37.973 に答える