여러 변수들을 하나의 값과 비교하는 방법
조회수 8862회
저는 지금 여러 변수를 하나의 정수값과 비교하여 세 단어의 문자열을 반환하는 함수를 만들고 있습니다. 이를 파이썬으로 작성하는 방법이 궁금합니다. 예를 들어,
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"]
이게 가능한건가요?
1 답변
-
부울 식(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 == 1
은x
에 대한 첫번째 검사와, 만약 이것이 거짓으로 나올 경우,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가 됩니다.
댓글 입력