Python 中列表为空?警惕循环内意外重置变量

你可能在循环中无意清空了列表,导致 append() 添加的内容被后续的 toppinglist = [] 覆盖——删除这行即可正确保留所有添加的元素。

这段代码的核心目标是收集用户选择的披萨配料并存入列表,逻辑本身清晰:用 while 循环持续询问、用 append() 累加选项、用条件判断退出。但问题出在这一行:

toppinglist = []

它被错误地放在了每次循环迭代的末尾(紧接在 anythingelse = anythingelse.title() 之后),导致每次循环结束前,刚添加的配料都被立即清空。最终循环退出时,toppinglist 始终是一个全新空列表,自然打印为空。

✅ 正确做法是:仅在程序开始时初始化一次空列表,之后只通过 append() 向其追加内容,绝不重复赋值为空列表。

以下是修复

后的完整代码(已优化可读性与健壮性):

toppinglist = []  # ✅ 只初始化一次,在循环外
instock = ['Cheese', 'Tomato', 'Chicken', 'Mushroom']
out_of_stock = ['Beef', 'Pork', 'Onions']  # 建议使用小写+下划线命名规范

want_toppings = input('Do you want toppings on your pizza? (Yes/No): ').strip().title()

while want_toppings == 'Yes':
    requested = input('Enter one topping: ').strip().title()
    toppinglist.append(requested)

    more = input('Anything else? (Yes/No): ').strip().title()
    if more == 'No':
        break
    # 注意:此处不再重置 toppinglist!

print(f"Your selected toppings: {toppinglist}")

? 关键注意事项:

  • toppinglist = [] 是重新绑定变量名到一个新空列表对象,不是清空原列表;若需清空已有列表,应使用 toppinglist.clear() 或 del toppinglist[:];
  • 使用 .strip() 可避免用户输入多余空格(如 "Yes ")导致条件判断失败;
  • 变量命名建议遵循 PEP 8 规范(如 out_of_stock 而非 Outofstock),提升代码可维护性;
  • 后续还可扩展功能,例如检查输入是否在 instock 中、提示缺货项等。

只要记住:初始化一次,累加多次,勿在循环中“归零” ——你的列表就能稳稳记住每一次 append。