7

純粋に1行でpython whileループを実行することは可能ですか?私はこれを試しました:

while n<1000:if n%3==0 or n%5==0:rn+=n

しかし、エラーメッセージが生成されます: Invalid Syntaxat the ifstatement

4

3 に答える 3

15

Python で複合ステートメント(スイート、インデントされたブロックを必要とするステートメント) を使用し、そのブロックに単純なステートメントのみが含まれている場合、改行を削除し、単純なステートメントをセミコロンで区切ることができます。

ただし、これは複合ステートメントをサポートしていません。

そう:

if expression: print "something"

動作しますが、

while expression: if expression: print "something"

とステートメントの両方が複合であるため、そうではありません。whileif

特定の例では、そのif expression: assignment部分を条件式に置き換えることができるため、複雑なステートメントの代わりに式を使用します。

while expression: target = true_expression if test_expression else false_expression

一般的に、またはwhile n<1000: rn += n if not (n % 3 and n % 5) else 0具体的に。

ただし、スタイルの観点からは、通常、その 1 行はそのままにしておく必要があります。

于 2013-03-03T12:47:54.580 に答える
5

あなたの例では、2 レベルのブロック/インデントを 1 行に折りたたもうとしていますが、これは許可されていません。これは、ループ、if ステートメント、関数定義などではなく、単純なステートメントでのみ行うことができます。つまり、あなたの例では、三項演算子を使用した回避策があります。

while n < 1000: rn += n if (n % 3 == 0 or n % 5 == 0) else 0

これは、「条件が成立する場合は rn に n を追加し、そうでない場合は 0 を追加する」と読みます。

于 2013-03-03T12:48:10.980 に答える
1

同様のことを行うことが可能です:

rn = 100
for n in range(10): rn += n if (n%3==0 or n%5==0) else 0
于 2013-03-03T12:54:25.417 に答える