여러 변수들을 하나의 값과 비교하는 방법


저는 지금 여러 변수를 하나의 정수값과 비교하여 세 단어의 문자열을 반환하는 함수를 만들고 있습니다. 이를 파이썬으로 작성하는 방법이 궁금합니다. 예를 들어,

x = 0
y = 1
z = 3
Mylist = []

if x or y or z == 0 :
    Mylist.append("c")
elif x or y or z == 1 :
    Mylist.append("d")
elif x or y or z == 2 :
    Mylist.append("e")
elif x or y or z == 3 : 
    Mylist.append("f")

이는 아래의 리스트를 반환하겠죠.

["c", "d", "f"]

이게 가능한건가요?

  • 2016년 06월 18일에 작성됨

조회수 242


1 답변


좋아요
0
싫어요
채택취소하기

부울 식(boolean expression)이 작동되는 방식을 잘못 이해하고 계신 것 같습니다. 이는 자연어에서의 문장과는 다르며, 질문하신 바는 아래와 같이 같은 수와의 비교를 원하시는 것 같네요.

if x == 1 or y == 1 or z == 1:

만약 올려주신 예시대로라면 x와 'y'는 그 자체로 평가됩니다. (0이면 False, 그 이외의 수는 True)

이는 아래와 같이 짧게 표현이 가능하며 :

if 1 in (x, y, z):

아래와 같이 :

if 1 in {x, y, z}:

중복되는 값을 제거하는 장점을 얻기위해 set을 사용하는 방법이 더 좋은 방법일 것입니다.

or을 사용하면 파이썬은 각각의 내용을 별개의 구문으로 봅니다. x or y == 1x에 대한 첫번째 검사와, 만약 이것이 거짓으로 나올 경우, y == 1에 대한 검사로 나뉘어 취급되는 거죠.

이는 연산자 우선순위에 의한 결과입니다. or 연산자는 == 연산자보다 낮은 우선순위를 갖고 있기 때문에, 더 먼저 평가가 되는 거죠.

물론 위와 달리 x or y or z == 1(x or y or z) == 1로 해석되었다 하더라도, 결과는 원했던대로 나오지 않습니다.

x or y or z와 같이 or로 연결된 부울 식은 참인 값을 가지는 변수를 만나는 순간 그 값이 결정됩니다. 하나만 참이면 전체가 참이 되기 때문이지요. python에서 0이나 비어있는 상태(리스트나 딕셔너리의 경우), 또는 false는 모두 거짓으로 해석됩니다. 이에 대해선 부울 식을 참고하여 파이썬이 어떤 값을 거짓으로 판단하는지를 알아보세요.

예를 들어 x = 2; y = 1; z = 0일 때, 부울식 x or y or z의 값은 첫번째 만나는 참값인 2가 됩니다. 따라서 y==1이 True임에도 불구하고 x or y or z의 값이 2가 되므로 2==1이 되어서 False가 됩니다.

  • 2016년 06월 19일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close