为什么在循环条件中使用赋值表达式会存储一个 bool 值?

Why does using an assignment expression in a loop condition store a bool value?

这段代码将你最喜欢的食物存储在一个列表中,但输入变成了一个 bool 类型的字符。为什么会发生这种情况,我该如何解决?

foods=list()
while food := input("what food do you like?: ") != "quit":
    foods.append(food)
print(foods)

发生这种情况是因为操作优先级。表达式

food := input("what food do you like?: ") != "quit"

读作

food := (input("what food do you like?: ") != "quit")

这就是 food 布尔值的原因。您可以通过添加括号来修复它:

while (food := input("what food do you like?: ")) != "quit":
   foods.append(food)

正在比较输入和“退出”。当您输入 kl 和 kgh 时,它们不等于“退出”并且食物是 True 并且它被附加到食物。当您输入“quit”作为输入时,quit 等于 quit 并且 food 为 False 并且表达式变为 while False 因此循环中断。相反,执行此代码:

foods=[]
while True:
    food=input("what food do you like: ")
    if food=="quit":
        break
    else:
        foods.append(food)
print(foods)