While' 循环单行代码

14 投票
3 回答
49573 浏览
提问于 2025-04-17 17:45

可以在一行里写一个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"

这样就不行,因为whileif语句都是复合语句。

对于你提到的具体例子,你可以把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

从风格上讲,通常你会希望把这一行单独放在一行上。

撰写回答