2

重複の可能性:
PythonでのORの動作:

おそらく非常に基本的ですが、周りを検索した後、私は少し立ち往生しています。私にとって、このコード行では、文字列にどちらの単語も含まれていないため、「ELSE」と出力されるはずです。明らかに、それはそれほど単純ではなく、その理由を理解できないようです。検索を簡単にするために、文字列をリストに分割するようにしました。私は何が間違っているのですか?

string = "Johnny Was Here Yesterday"
string = string.split()

if "Bob" or "Hello" in string:
    print "IF"
else:
    print "ELSE"
4

4 に答える 4

8

適切な方法はこれを行うことです:

if 'Bob' in text or 'Hello' in text:
    print 'IF'
else:
    print 'ELSE'

コードが機能しない理由は、Pythonがそれを次のように評価するためです。

if ('Bob') or ('Hello' in text):

'Bob'常にに評価されるため、True関数は常に出力します'IF'

ちなみに、非常に便利な組み込みメソッドやライブラリを上書きするため、変数名として使用strすることはお勧めできません。stringstr()string

于 2013-01-09T05:06:48.380 に答える
4

Pythonでは、空でない文字列はTrueと評価されます。

あなたのif声明は次のように解釈されます:

if ("Bob") or ("Hello" in string"):

"Bob"は空でない文字列であるため、ステートメントは常に。に評価されますTrue

あなたは次のようなものを使うべきです

if "Bob" in string or "Hello" in string:

また

if any(map(lambda x: x in string, ["Bob", "Hello"]))

他の回答で述べたように、変数名はpythons標準ライブラリstringの1つと衝突するため、変数名の使用を再検討することをお勧めします。

于 2013-01-09T05:07:59.133 に答える
1

それが書かれている方法では、2つのテストがあります。最初のテストは、、if "Bob"2番目のテストは"Hello" in stringです。if str空でない文字列に対しては常にtrueであるため、常にtrueとif "Bob"評価されます。

if ("Bob" in string) or ("Hello" in string):これは、を使用するか、を使用して修正できますif any((x in string for x in ["Hello", "Bob"]):

于 2013-01-09T05:10:35.427 に答える
0

「ボブ」は3つの長さの文字列Trueで、原因になっている場合です。

>>> bool("Bob")
True
>>> bool("")
False

次のように変更する必要があります。

if "Bob" in string or "Hello" in string:
    print "IF"
else:
    print "ELSE"
于 2013-01-09T05:18:44.083 に答える