2012-06-27 1 views
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" 

현재 출력은 '아니오'입니다. 세 개의 문자열과 세 가지 목록 : 당신은 기본적으로 모든 가능성에 큰 튜플을 만들

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

:이처럼 쓸 경우 test 또는 test1를 사용할 때

+6

, 당신은 문자열 목록을 비교하고 있습니다. – Levon

+5

'if test == 'POP'또는 '...'또는 '...''는 여러분이 생각하는대로하지 않습니다 : 아마도 부울 논리가 어떻게 작동하는지 잘 문서화되어 있습니다 –

+0

문자열의 대소 문자를 무시하려면 두 피연산자를 소문자로 변환 할 수 있습니다. ' 'POP'.lower() =='poP'.lower()' –

답변

7

당신은 파이썬이 문장을 어떻게 처리하는지 이해하지 못하고 있습니다. 파이썬은 자연 언어가 아닙니다.

if (test==(['Pop'] or 'Pop')): 

or이 괄호 안에 있기 때문에 먼저 처리합니다. 이 시점에서

if (test==['Pop']): 

['Pop']

같다 test 여부를 테스트 : [ '팝']이 True로 간주됩니다, 파이썬 전체 문을 줄일 수 있기 때문에 그래서

['Pop'] or 'Pop' 

본다

실제로하고 싶은 일은 다음과 같습니다.

(test == ['Pop']) or (test == 'Pop') 

이것은입니다. 완전히 다른

보다
test == (['Pop'] or 'Pop') 
+1

이상 전통적으로 '(' 'Pop' ','Pop ')' –

+0

@JonClements의 'test in'으로 쓰여졌지만 전통적으로는 잘 모르겠지만 그렇습니다. –

+1

감사합니다. 이것은 정확하게 나의 혼란이었다. 위의 코드가 바뀌 었음에도 불구하고이를 확인해 주셔서 감사합니다. – Atticus29

2

의 if 문은 true가됩니다. 변수가 거기에 있으면 if 문이 true입니다.

+0

나는 ('POP', '팝', '팝', [ 'POP'], [ '팝'], [ '팝'])) :' 작업. – JAB

+0

@JAB, 그렇습니다.하지만 왜 그런 식으로하고 싶습니까? –

+0

이것은 질문에 대답하지 않습니다. –

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" 

각 하나는 별도의 테스트입니다.

+2

질문에 가장 가까운 대답입니다. 다른 것들은 완전히 다른 것을 말하고 있습니다. –

+0

이것은 항상'test1 == 'POP''의 결과입니다. –

+2

이것은 완전히 잘못된 것입니다. test1에 관계없이 항상 "예"라고 말할 것입니다. –

1

test == (a or b)test == a or test == b 다릅니다.

(a or b) 반환 bool(a) IFF a은 True입니다 그렇지 않으면 b. 따라서 test == ('POP' or whatever)test == 'POP'과 같습니다. bool('POP')이 True이면 Python의 다른 비어 있지 않은 문자열과 마찬가지입니다.

여러 값을 테스트하려면 다음을 사용하십시오. value in [a, b].

참고 : ['a'] != 'a' - 이후는 문자열이고 전자는 문자열을 포함하는 목록입니다.

귀하의 경우에는 test[0].lower() == 'pop' 수 있습니다. 사용자가 단지 대소 문자를 구분 비교를 수행하려고하는 것 같습니다

0

: 두 *리스트 * 비교되지

if test1.lower() == 'pop': 
    print 'yes' 
else: 
    print 'no'