次のスクリプトは、trueを返す必要があると思うときに、falseを返します。ここで何が起こっているのか分かりますか?どうもありがとう、みんな!
test=['Pop']
test1='Pop'
if (test==('POP' or 'Pop' or 'pop' or ['POP'] or ['Pop'] or ['pop'])):
print "yes"
else:
print "no"
現在、出力は「いいえ」です。
次のスクリプトは、trueを返す必要があると思うときに、falseを返します。ここで何が起こっているのか分かりますか?どうもありがとう、みんな!
test=['Pop']
test1='Pop'
if (test==('POP' or 'Pop' or 'pop' or ['POP'] or ['Pop'] or ['pop'])):
print "yes"
else:
print "no"
現在、出力は「いいえ」です。
Pythonがステートメントを処理する方法を理解していません。Pythonは自然言語ではありません。
if (test==(['Pop'] or 'Pop')):
or
はparens内にあるため、最初に処理します。だからそれは見ます
['Pop'] or 'Pop'
['Pop']はTrueと見なされるため、pythonはステートメント全体を次のように減らします。
if (test==['Pop']):
この時点で、test
が等しいかどうかをテストします['Pop']
あなたが実際にやりたいことは次のとおりです。
(test == ['Pop']) or (test == 'Pop')
これは完全に異なります
test == (['Pop'] or 'Pop')
このように書くと、test
またはtest1
:を使用するとifステートメントが真になります。
test=['Pop']
test1='Pop'
if (test in ('POP', 'Pop', 'pop', ['POP'], ['Pop'], ['pop'])):
print "yes"
else:
print "no"
基本的に、3つの文字列と3つのリストというすべての可能性を備えた大きなタプルを作成しています。変数がそこに存在する場合、ifステートメントはtrueです。
test == (a or b)
とは異なりtest == a or test == b
ます。
(a or b)
a
iffbool(a)
がTrueであるか、それ以外の場合を返しますb
。したがって、Pythonの他の空でない文字列と同様に、becauseはTruetest == ('POP' or whatever)
と同等です。test == 'POP'
bool('POP')
複数の値をテストするには、次を使用できますvalue in [a, b]
。
注:['a'] != 'a'
–後者は文字列であり、前者は文字列を含むリストです。
あなたの場合、あなたはそうすることができtest[0].lower() == 'pop'
ます。
test=['Pop']
test1='Pop'
if test1 == 'POP' or test1 == 'Pop' or test1 == 'pop' or test1 == ['POP'] or test1 == ['Pop'] or test1 == ['pop']:
print "yes"
else:
print "no"
それぞれが個別のテストです。
ユーザーが大文字と小文字を区別しない比較を行おうとしているようです。
if test1.lower() == 'pop':
print 'yes'
else:
print 'no'