0

次のスクリプトは、trueを返す必要があると思うときに、falseを返します。ここで何が起こっているのか分かりますか?どうもありがとう、みんな!

test=['Pop']
test1='Pop'

if (test==('POP' or 'Pop' or 'pop' or ['POP'] or ['Pop'] or ['pop'])):    
    print "yes"
else:
    print "no"

現在、出力は「いいえ」です。

4

5 に答える 5

7

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')
于 2012-06-27T17:46:37.627 に答える
2

このように書くと、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です。

于 2012-06-27T17:33:54.620 に答える
1

test == (a or b)とは異なりtest == a or test == bます。

(a or b)aiffbool(a)がTrueであるか、それ以外の場合を返しますb。したがって、Pythonの他の空でない文字列と同様に、becauseはTruetest == ('POP' or whatever)と同等です。test == 'POP'bool('POP')

複数の値をテストするには、次を使用できますvalue in [a, b]

注:['a'] != 'a'–後者は文字列であり、前者は文字列を含むリストです。

あなたの場合、あなたはそうすることができtest[0].lower() == 'pop'ます。

于 2012-06-27T17:59:15.977 に答える
0
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"

それぞれが個別のテストです。

于 2012-06-27T17:36:34.497 に答える
0

ユーザーが大文字と小文字を区別しない比較を行おうとしているようです。

if test1.lower() == 'pop':
    print 'yes'
else:
    print 'no'
于 2012-11-16T10:01:54.970 に答える