Python循环条件中使用赋值表达式为何存储布尔值,如何修复?
Python代码问题原因与修复方案
问题原因
问题出在运算符优先级的差异:Python中不等比较运算符!=的优先级高于海象赋值运算符:=,原代码的while food := input("what food do you like?: ") != "quit":行实际执行顺序如下:
- 先运行
input("what food do you like?: ") != "quit",得到布尔类型的比较结果 - 再将该布尔结果赋值给变量
food
因此只要用户输入的内容不是quit,存入foods列表的就是布尔值True,和预期存储用户输入的食物名称的逻辑不符。
修复方法
给海象运算部分加括号,手动调整运算顺序,确保先完成用户输入的读取和赋值,再做退出判断。
修复后代码如下:
foods = list() while (food := input("what food do you like?: ")) != "quit": foods.append(food) print(foods)
加括号后逻辑变为:先读取用户输入赋值给food,再判断food是否不等于quit,判断为真时就将用户输入的内容存入列表,符合预期功能。
内容的提问来源于stack exchange,提问作者Dani Nago
相关产品推荐
相关产品推荐

