不明白为什么 while(t-=1):是一个语法错误



我以前一直在用C/C++进行编码。

在C++中,以下代码运行良好。它打印了5次Hello。

int t = 5; 

while (t--)
{
cout << "Hello";
}

上面的循环工作得很好。当t变为0时,循环条件将为false,循环将终止。

但当我在Python中尝试类似的东西时:

t = 5
while (t-=1):
print("Hello")

给出了CCD_ 2。

我知道,在python中,我们可以使用1==True和0==False逻辑。

那么我的Python循环中有什么问题?

C(++(与Python不同,它从赋值中返回赋值,因此它们是可以在条件等中使用的有效表达式。在Python中,您不能使用更简单的while t = 1:,因为赋值t = 1的值是None,而不是1;此外,它在语法上不是一个表达式——这就是为什么你会得到SyntaxError

引入海象运营商:=正是为了提供一种实现这一点的方法;但结果不是惯用的Python。

# Requires Python >= 3.8; not a good example
t = 6 # Because the condition will be false and not print when you reach 0
while t := t-1:
print('Hello')

在某些地方,将赋值作为表达式是可以辩护的,但这并不是一个例子。Python是有意识地设计来避免这种类型的副作用的,这可以说使C代码更紧凑,但更难一目了然,尤其是当您的表达式包含多个赋值时。

在Python中,通常的方法是

for t in range(5):
print('Hello')

或者,如果你真的坚持倒计时,

for t in range(5, 0, -1):
print('Hello')

通常情况下,在Python中,您真的不需要显式循环来多次拥有相同的东西。

print('n'.join(['Hello'] * 5))

或者,如果可以接受空格而不是换行符,则

print(*['Hello'] * 5)

因为t -= 1不是一个表达式,所以它是一个语句。本质上:

t = t - 1

表达式为t - 1,语句为t = <some_expression>

while关键字需要一个表达式,该表达式可以是(1(函数调用,也可以是(2(数学表达式。

所以,写

while t -= 1:

相当于:

while t = t - 1:

因此是语法错误。

(作为对比,C递减算子--是"具有副作用的表达式"(

使用while:打印"你好"5次

t = 5
while t:
print("Hello")
t -= 1

打印:

Hello
Hello
Hello
Hello
Hello

最新更新