2017-11-17 14 views
-1

저는 파이썬에 비교적 익숙하며 여기에서 무슨 일이 일어나고 있는지 잘 모릅니다. 나는 다음과 같은 코드가 있습니다논리적 기호를 깨는 줄

if cell.location != (always_empty_location 
        and random.random() < self.settings['OBSTACLE_RATIO']): 

를 그리고이 생겼습니다,하지만 난 괄호를 제거하고 첫 번째 줄에 간단한

and \ 

을 할 경우, 그것을 작동합니다. 파이썬이 시나리오를 어떻게 처리하는지에 대한 확실한 설명을 찾을 수없는 것 같습니다. 온라인으로 모든 것이 이것이 효과가 있음을 시사합니다.

+0

"* 고장났습니다 *". – melpomene

+1

StackOverflow에 오신 것을 환영합니다. 도움말 설명서의 게시 지침을 읽고 따르십시오. [최소한의 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)가 여기에 적용됩니다. MCVE 코드를 게시하고 문제를 정확하게 설명하기 전까지는 효과적으로 도움을 드릴 수 없습니다. 게시 된 코드를 텍스트 파일에 붙여넣고 설명한 문제를 재현 할 수 있어야합니다. – Prune

+0

@melpomene - 내 테스트가 미쳐서, 완전히 다른 행동을하고 있습니다. –

답변

3

이 줄 바꿈 함께 할 수 없다, 그것은

if a != b and c < d: 

두 번째 조건이 a != (b and (c < d))로 구문 분석하는 반면 첫 번째 조건은 (a != b) and (c < d)로 구문 분석

if a != (b and c < d): 

매우 다른 단지입니다.

0

파이썬에서는 괄호 안에 포장하거나 \을 사용하는 경우에만 여러 줄 조건을 사용할 수 있습니다.

if foo == 1 and \ 
    bar == 2: 
    do_something() 

을 그리고 이것은 작동합니다 :

그래서이 작품

당신이 무슨 짓을
if (foo == 1 and 
     bar == 2): 
    do_something() 

은, 그러나, 조건의 절반 주위에 괄호를 넣어했다!

if foo == (1 
     and bar == 2): 
    do_something() 

그래서 여기에 무슨 일이 일어나고 있는지가 그 값을 foo을 테스트 한 후 (1 and bar == 2)을 평가하고, 점이다. foo == True 그 다음 작동합니다. 그러나 foo == Falsebar != 2 인 경우에는 문제가 발생합니다.