2012-09-08 3 views
8

문을 여러 번 다른 트리거로 다시 작성하지 않고 둘 이상의 조건에서 트리거하도록 if 문을 가져 오려고합니다. 예 :if/elif 문을 사용한 여러 조건

if user_input == "look": 
    print description 


if user_input == "look around": 
    print description 

어떻게 하나의 진술로 요약 할 수 있습니까?

나는 '또는'사용 시도하고에 관계없이 입력이 조건 중 하나와 일치하는지 여부의 문을 실행하는 데 전혀 raw_input을 발생했습니다.

if user_input in ("look", "look around"): 
    print description 

는 2.7을 사용하고 있기 때문에, 당신은 또한 다음과 같이 작성할 수있다 : 당신은 많은 가능성이있는 경우

if user_input == "look" or "look around": 
    print description 

답변

11

당신이 할하려는 것은

if user_input == "look" or user_input == "look around": 
    print description 

또 다른 옵션이다 (2.7 또는 3+에서는 작동하지만 2.6 이하에서는 작동하지 않습니다.)

if user_input in {"look", "look around"}: 
    print description 

은 요소의 set을 만듭니다. 검색하는 데 약간 빠른 속도입니다 (그러나 검사하는 요소의 수가 2보다 훨씬 큰 경우에만 문제가됩니다).


첫 번째 시도가 항상 완료된 이유는 다음과 같습니다. 파이썬의 대부분의 것들은 True (False, None 또는 공백 문자열,리스트, 딕트 등 제외)으로 평가됩니다. or은 두 가지를 가져 와서 부울로 평가합니다. 따라서 user_input == "look" or "look around"(user_input == "look") or "look_around"처럼 처리됩니다. 첫 번째가 거짓이라면 항상 if "look_around":이라고 썼습니다.

+0

감사 두글 함께 할 수 없다! 정말 어리석은 질문! – Blaine

+0

@Blaine 이것은 많은 새로운 프로그래머가 Python에서 작동하는 문제입니다. 그것은 당신이 원하는 것을하고있는 것처럼 보이지만, 그렇지 않습니다. :) 그것이 왜 작동하는지에 대한 나의 설명은 이해가된다. – Dougal

+0

아 설명해. 내가 논리 테이블을 배우므로 너를 구해! :) – Blaine

2

당신은 그들이 옵션 부분에 패턴을 따르는 경우 문자열과 일치하는 정규 표현식을 사용할 수 있습니다 또는 배열 조회 할 수있는 : 부울 연산자 or는 부울 값으로 작동

if user_input in ["look", "look around"]: 
    print description 

를, 그것은을 평가 양쪽에 표현식 을 입력하고 표현식 중 하나가 True으로 평가되면 True을 반환합니다. 그것은 자연 언어 '