var = 86
print((var<90) & (var>=80))
그러나
print(var<90 & var>=80)
print(var<90 & (var>=80))
print((var<90) & var>=80)
print(var<90 & True)
`
왜 이러한 거짓주는 모든 않는 트루 준다? Operator precedence의 일례를 print(var<90 & True)
걸리므
var = 86
print((var<90) & (var>=80))
그러나
print(var<90 & var>=80)
print(var<90 & (var>=80))
print((var<90) & var>=80)
print(var<90 & True)
`
왜 이러한 거짓주는 모든 않는 트루 준다? Operator precedence의 일례를 print(var<90 & True)
걸리므
이
print(var<90 & True)
print(var < (90 & True))
는 등가이며, 따라서 그것은 거짓 제공된다.
그러나 올바른 위치에 괄호를 넣으면 즉, print((var<90) & True)
이면 True가 표시됩니다.
비트 연산자 &
이 비교 연산자보다 우선 순위가 높으므로 90 & var
이 먼저 평가 된 다음 연결 비교가 수행됩니다.
>>> var = 86
>>> var<90 & var>=80 # var<90, and '90&var' is greater than or equal to 80
False
>>> var<(90 & var)>=80 # same as above
False
>>> (var<90) & (var>=80)
True
부울 연산 대신 연산자 and
을 사용해야합니다.
관계 연산자 체인 파이썬 지원하는 (즉, 대신 0 < var and var < 100
의 0 < var < 100
을 사용할 수 있습니다) 및 (즉, 덧셈, 뺄셈, 비트 연산 등)으로 인해 연산자 우선 순위에 전에 관계 연산자를 이항 연산을 처리하기 때문에, 실패의 모든 게시 한 사례는 실제로 다른 것을 의미합니다.
var < 90 & var >= 80
이 (var < 90 & var) and (90 & var >= 80)
var < 90 & (var>=80)
에 해당하는 4 경우보고되는 var < 90 & True
에 해당합니다.(var<90) & var>=80
도 역시 4 번째 경우와 유사합니다 (이 경우 True & var >= 80
으로 해결되어 0 >= 80
으로 해결됨).var < 90 & True
은 var < (90 & True)
과 같습니다. &
연산자의 구현은 피연산자 중 하나가 정수가 아닌 경우 (동적 입력의 가장 큰 함정 중 하나 인 경우) 0
을 반환하도록 설계되었으므로 이러한 유사 명령문은 모두 var < 0
인 false로 해석됩니다.
왜 부울 연산을 수행하기 위해 비트 연산자를 사용하려고합니까? –
'&'를'and'로 바꾸어보십시오. 네가하는 일이 실제로 의미가 없다. – 101
나는 'and'연산자를 사용한다고 생각합니다. 나는 단지 이것이 왜 False를 제공했는지 알고 싶었습니다. @ IgnacioVazquez-Abrams –