2014-10-28 2 views
1

나는 OR 연산자에 대한 많은 문서를 알고 있지만 파이썬 코드로는 작동하지 않습니다. 나는 초보자이기 때문에 많은 파이썬 구문/메소드가 새로운 것입니다. 현재파이썬 OR 연산자에 대해 혼동을 못했습니다.

def getDecision(): 
x = input() 
while x != ("a" or "b"): 
    print("Please input \"A\" or \"B\"") 
    x = input() 
return x 

그것은 단지 검사 X는 동일하지 않은 경우, 내가이 함께 갈 것입니다 것

while (x != "a") or (x != "b") 

쓰기 것처럼 이것은 다른 질문에 다른 B. 을 무시하는 것 A 또는 B가

많은 감사

+1

또한 찾을 수 있습니다 HTTP 또한 중 하나를 사용해야합니다 : //stackoverflow.com/questions/23294658/asking-the-user-for-input-until-they-give-a-valid-response useful. – Ffisegydd

+1

'x not in ('A ','B ') :' – Matt

+0

나는 이것을 복제본으로 표시하는 것에 동의하지 않습니다. 이것은'=='보다는'! ='이기 때문에, 질문의 논리는 복제본보다 더 어렵습니다. 여기에 매트의 대답이 필요하거나 '또는'을 'and' :'x! = "a"및 x! = "b"'로 바꾸는 해법이 필요합니다. – tom10

답변

2

에 입력 루프 경우는 아마되어야합니다 :

while x!="a" and x!="b": 

또는

while x not in ("a", "b"): 

첫 번째는 ~(a or b) == ~a and ~b 이후, 명세서의 logical equivalence입니다. 두 번째는 이것을 작성하는 Pythonic 방식이며 이해하기 쉽습니다.

+2

새로운 사용자의 경우, 어떻게해야 하는지를 설명하는 것이 더 중요합니다. 그것 –

+0

@ TimCastelijns : 그럼 그걸 자유롭게 해 주시기 바랍니다. – tom10

+0

나는 왜 그런 일이 일어 나는지 정확히 모르겠다.하지만 금 파이썬 뱃지 주인이 되리라고 생각했다. : –

2

문제는이 부분에서 온다 :

x != ("a" or "b") 

("A"또는 "b")가 항상로 평가합니다 표현 "A"그것이 무엇을하는 것은 처음 "A"(첫번째 변수를 확인하는 것입니다 때문에)는 True/False입니다 (파이썬 빈 문자열은 False로, 나머지는 True로 평가됩니다). "a"는 True로 평가되기 때문에 두 번째 변수를 검사하지 않고 "a"만 반환합니다. 또한이 표현식은 주어진 변수가 True로 평가되는지 확인한 다음 첫 번째 (귀하의 경우 "a")을 반환합니다.

용액을 다른 사용자 바와 같이

while x not in ('a', 'b') 

로 변경 될 것이다.

0

while 루프를 함수에 넣으려면 들여 쓰기해야합니다.

('A', 'B') 또는 동안 X = "A"와 X = "B"가 아닌 x를 잠시 :!

관련 문제