2013-03-03 59 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