名单有问题

2024-05-23 18:41:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码是:

foods2 = list()
while food2 := input("Which food do you like ? ") != "quit":
    foods2.append(food2)
print(foods2)

我希望输出是来自输入的列表

为什么在输入'quit'之前有三个输入时输出[True, True, True]


Tags: 代码youtruewhichinputfooddoquit
3条回答

您必须使用( )来分离walrus操作符和测试:

foods2 = list()
while (food2 := input("Which food do you like ? ")) != "quit":
    # ^                     -^ - HERE
    foods2.append(food2)
print(foods2)

看看Operator precedence,赋值运算符:=是它们中最低的。这意味着python首先对!=求值,并将其布尔结果赋给food2。可以使用括号更改计算顺序:

foods2 = list()
while (food2 := input("Which food do you like ? ")) != "quit":
    foods2.append(food2)
print(foods2)

作为@tdelaneysaid,这是因为运算符优先级和缺少括号来覆盖它。仅供参考,这里有另一种使用generator function的方法

def ask_user():
    while (ans := input("Which food do you like? ")) != "quit":
        yield ans

foods = [inp for inp in ask_user()]

相关问题 更多 >