34

変数に複数の値のいずれかがあるかどうかを確認したい。なぜorこの状況でうまくいかないのか混乱しています。例を示したチュートリアルに従っていましたif (a or b):が、これを実行しようとすると、変数が最初の値に対してのみチェックされます。小切手の何が問題になっていますか?

name = raw_input('Please type in your name:')

if len(name) < 5:
    print "Your name has fewer than 5 characters"
elif len(name) == 5:
    print "Your name has exactly 5 characters"
    if name == ("Jesse" or "jesse"):
        print "Hey Jesse!"
else:
    print "Your name has greater than 5 characters"
4

4 に答える 4

52
("Jesse" or "jesse")

"Jesse"上記の式は、 がに評価されるかどうかをテストしTrueます。存在する場合、式はそれを返します。それ以外の場合は、 を返し"jesse"ます。この式は次のように書くのと同じです:

"Jesse" if "Jesse" else "jesse"

"Jesse"ただし、 は空でない文字列であるため、常に評価されてTrue返されます。

>>> bool("Jesse")  # Non-empty strings evaluate to True in Python
True
>>> bool("")  # Empty strings evaluate to False
False
>>>
>>> ("Jesse" or "jesse")
'Jesse'
>>> ("" or "jesse")
'jesse'
>>>

これは、式が次のことを意味します。

name == ("Jesse" or "jesse")

基本的にこれを書くことと同等です:

name == "Jesse"

問題を解決するには、次のin演算子を使用できます。

# Test whether the value of name can be found in the tuple ("Jesse", "jesse")
if name in ("Jesse", "jesse"):

nameまたは、 withの値を小文字にしてから直接str.lower比較することもできます。"jesse"

# This will also handle inputs such as "JeSSe", "jESSE", "JESSE", etc.
if name.lower() == "jesse":
于 2013-08-13T15:02:28.640 に答える
10
if name in ("Jesse", "jesse"):

それを行う正しい方法になります。

ただし、を使用する場合or、ステートメントは次のようになります

if name == 'Jesse' or name == 'jesse':

>>> ("Jesse" or "jesse")
'Jesse'

と評価されるため、観察したように、 との等しいかどうかのみをテストし、 を'Jesse'テストしないため、基本的に'jesse'いつ をテストしていません。if name == ("Jesse" or "jesse")'Jesse''jesse'

于 2013-08-13T15:00:49.353 に答える
6

大文字と小文字を区別しない比較が必要な場合は、lowerorを使用しupperます。

if name.lower() == "jesse":
于 2013-08-13T15:02:00.230 に答える
6

演算子は、trueのor場合は最初のオペランドを返し、それ以外の場合は 2 番目のオペランドを返します。したがって、あなたの場合、テストは と同等if name == "Jesse"です。

の正しい適用は次のorようになります。

if (name == "Jesse") or (name == "jesse"):
于 2013-08-13T15:02:10.050 に答える