7

是否有可能纯粹在一行上有一个 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"

不是因为whileandif语句都是复合的。

对于您的具体示例,您可以用条件表达式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具体地。

不过,从风格的角度来看,您通常希望将那一行留在它自己的位置上。

于 2013-03-03T12:47:54.580 回答
5

在您的示例中,您尝试将两级块/缩进折叠成一行,这是不允许的。您只能使用简单的语句来执行此操作,而不是循环、if 语句、函数定义等。也就是说,对于您的示例,有一个使用三元运算符的解决方法:

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

读作“如果条件成立,则将 n 添加到 rn,否则添加 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 回答