While' 循环单行代码
可以在一行里写一个Python的while循环吗?我试过这样写:
while n<1000:if n%3==0 or n%5==0:rn+=n
但是它给我报了一个错误信息:语法错误,出现在if
语句那里。
3 个回答
1
可以做一些类似的事情:
rn = 100
for n in range(10): rn += n if (n%3==0 or n%5==0) else 0
5
在你的例子中,你试图把两个层级的代码块或缩进合并成一行,这样做是不允许的。你只能对简单的语句这样操作,而不能对循环、条件语句、函数定义等做同样的事情。不过,对于你的例子,有一种方法可以解决这个问题,那就是使用三元运算符:
while n < 1000: rn += n if (n % 3 == 0 or n % 5 == 0) else 0
它的意思是“如果条件成立,就把 n 加到 rn 上,否则加 0”。
25
在Python中,当你使用一个需要缩进块的复合语句时,如果这个块里只包含一些简单的语句,你可以把换行去掉,用;
分号来分隔这些简单语句。
不过,这种方法不适用于复合语句。
举个例子:
if expression: print "something"
这样是可以的,使用多个简单语句也是可以的:
while expression: print("something"); print("something else")
但是:
while expression: if expression: print "something"
这样就不行,因为while
和if
语句都是复合语句。
对于你提到的具体例子,你可以把if 表达式: 赋值
的部分换成一个条件表达式,这样就可以用一个表达式代替复杂的语句:
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
。
从风格上讲,通常你会希望把这一行单独放在一行上。