질문 : 단일 값에 대해 여러 변수를 테스트하는 방법은 무엇입니까?
여러 변수를 정수와 비교하고 세 글자의 문자열을 출력하는 함수를 만들려고합니다. 이것을 파이썬으로 번역하는 방법이 있는지 궁금합니다. 그러니 이렇게 말하십시오 :
x = 0
y = 1
z = 3
mylist = []
if x or y or z == 0 :
mylist.append("c")
if x or y or z == 1 :
mylist.append("d")
if x or y or z == 2 :
mylist.append("e")
if x or y or z == 3 :
mylist.append("f")
다음 목록을 반환합니다.
["c", "d", "f"]
이와 같은 것이 가능합니까?
답변
부울 표현식이 어떻게 작동하는지 오해합니다. 그들은 영어 문장처럼 작동하지 않으며 여기서 모든 이름에 대해 동일한 비교에 대해 이야기하고 있다고 추측합니다. 당신이 찾고있는:
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}:
사용 세트
상수 선정 멤버십 시험을 활용 (즉 in
(가) - 왼손 피연산자 뭐든 정해진 시간 소요).
당신이 사용하는 경우 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
는 'truthy'인 첫 번째 인수로 평가됩니다. 예를 들어 False
가 아닌 숫자 0 또는 비어 있습니다 (Python이 부울 컨텍스트에서 false로 간주하는 것에 대한 자세한 내용 은 부울 표현식 참조).
따라서 값 x = 2; y = 1; z = 0
, x or y or z
는 인수의 첫 번째 참과 유사한 값이기 때문에 2
해석됩니다. 그러면 y == 1
이 True
이더라도 2 == 1
은 False
입니다.
역에도 동일하게 적용됩니다. 단일 변수에 대해 여러 값을 테스트합니다. x == 1 or 2 or 3
은 동일한 이유로 실패합니다. x in {1, 2, 3}
x == 1 or x == 2 or x == 3
또는 x를 사용하십시오.
출처 : https://stackoverflow.com/questions/15112125/how-to-test-multiple-variables-against-a-single-value
'프로그래밍 언어 > Python' 카테고리의 다른 글
Python 애플리케이션의 메모리 사용량 확인하는 방법 (0) | 2021.11.19 |
---|---|
파이썬 sheel이 32 비트 또는 64 비트에서 실행 중인지 확인하는 방법 (0) | 2021.11.19 |
프로젝트에서 모든 .pyc 파일을 제거하는 방법 (0) | 2021.11.19 |
파이썬에서 공백을 기준으로 문자열을 list로 변환 (0) | 2021.11.18 |
Python에서 여러 구분 기호로 문자열 분할 (0) | 2021.11.18 |