虽然循环一线

时间:2013-03-03 12:39:09

标签: python while-loop

是否有可能只在一行上有一个python while循环,我试过这个:

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

但它会在Invalid Syntax语句

处生成错误消息:if

3 个答案:

答案 0 :(得分:11)

在python中使用compound statement时(需要套件,缩进块的语句),并且该块仅包含 simple statements ,您可以删除换行符,并且用分号分隔简单语句。

但是,支持复合语句。

所以:

if expression: print "something"

有效,但

while expression: if expression: print "something"

,因为whileif语句都是复合语句。

对于特定的示例,您可以使用conditional expression替换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 :(得分:4)

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

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

如果条件成立,则读为'添加n到rn,否则添加0'。

答案 2 :(得分:1)

可以做类似的事情:

rn = 100
for n in range(10): rn += n if (n%3==0 or n%5==0) else 0