2017-11-17 10 views
-1

私は比較的新しいpythonです。ここで何が起こっているのかよく分かりません。私は、次のコードを持っている:論理行を破る行

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

を、それが壊れていますが、私は括弧を削除し、最初の行に簡単な

and \ 

をすれば、それが動作します。私は、pythonがこのようなシナリオをどのように扱うかについての確かな説明を見つけることができないようです。これが機能するはずです。

+0

「*が壊れています」を定義します。 – melpomene

+1

ようこそStackOverflowへ。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。 MCVEコードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。 投稿したコードをテキストファイルに貼り付け、説明した問題を再現できるはずです。 – Prune

+0

@melpomene - 私のテストは狂っている、私はまったく異なる振る舞いをしている。 –

答えて

3

これは改行とは何の関係もありません、それは

if a != b and c < d: 

は、第2の条件はa != (b and (c < d))として解析するのに対し、第一の条件は(a != b) and (c < d)として解析し

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

とは非常に異なっているだけのことです。

0

Pythonでは、複数行条件を括弧で囲むか、\を使用する場合にのみ実行できます。

だから、この作品:

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

そして、これは動作しますが:

あなたが何をしたか
if (foo == 1 and 
     bar == 2): 
    do_something() 

、しかし、症状の半分の周りに括弧を入れていました!

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

それでは、ここで起こっていることは、それは(1 and bar == 2)を評価し、その値をfooをテストだということです。 foo == Trueなら、それはうまくいくでしょう。しかし、foo == Falsebar != 2の場合、それは成功します。

関連する問題