프로그래밍 언어/Python

python 단일 값에 대해 여러 변수를 테스트하는 방법

Rateye 2021. 11. 19. 10:03
728x90
반응형
질문 : 단일 값에 대해 여러 변수를 테스트하는 방법은 무엇입니까?

여러 변수를 정수와 비교하고 세 글자의 문자열을 출력하는 함수를 만들려고합니다. 이것을 파이썬으로 번역하는 방법이 있는지 궁금합니다. 그러니 이렇게 말하십시오 :

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:

xy 는 그 자체로 평가됩니다 ( 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 == 1True 이더라도 2 == 1False 입니다.

역에도 동일하게 적용됩니다. 단일 변수에 대해 여러 값을 테스트합니다. 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
728x90
반응형