2013-03-03 58 views
2

是否有可能有while循环纯粹是在一行一条巨蟒,我已经试过这样:While循环的单行

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

但它产生的错误信息:在if声明

Invalid Syntax
+1

你为什么不试试* *呢?这是一个无限循环,但就Python而言,它将起作用。 – 2013-03-03 12:39:48

+0

@MartijnPieters我有,它不起作用 – user2128561 2013-03-03 12:40:28

+2

“它不工作”不是问题的描述。 *什么*不起作用?你期望发生什么,发生了什么?你得到了什么错误? – 2013-03-03 12:41:03

回答

9

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

但是,那不是支持复合语句。

所以:

if expression: print "something" 

作品,但

while expression: if expression: print "something" 

因为无论是while和的if陈述化合物。

为了您具体例如,你可以使用,而不是一个复杂的语句表达了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明确。

从风格的角度来看,你通常希望自己留下那一行。

+0

稍有相关,在Python中是否有与'?:'C语句等价的语句?如果有,它应该完成这项工作。 – asheeshr 2013-03-03 12:49:29

+2

@AshRj有,请参阅我的答案。 – l4mpi 2013-03-03 12:49:57

+0

@AshRj:是的,条件表达式“true_expression if expression else false_expression”。 – 2013-03-03 12:50:09

4

在您的示例中,您尝试将两个块/缩进级别合并为一行,这是不允许的。

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

其内容为“添加n至RN如果:你只能用简单的语句,不循环,if语句,函数定义等。这就是说,你比如有使用三元运算符一种变通方法做到这一点条件成立,否则加0。

1

它是更多钞票做同样的事情:

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