Python程序循环无法终止且卡在首次输入问题求助
程序循环无响应、无法添加新配料的问题修复
问题分析
你的代码存在两个关键问题,导致无法实现多配料添加的预期功能:
- 配料输入仅初始化一次:
requested_toppings的输入语句写在循环外部,只会在程序启动时获取一次用户输入,后续循环调用program()时始终复用第一次的配料值,无法处理新的选择。 - 冗余的大小写转换逻辑:
input(...).strip().upper().lower()属于无效操作,大写转小写完全多余,徒增代码复杂度。
修复后的代码
available_toppings = ["mushrooms", "olives", "pepperoni", "pineapple"] # 优化配料列表打印方式,适配列表长度变化 print(f"Hello! please choose from the available toppings:\n{', '.join(topping.title() for topping in available_toppings)}\n") # 修改函数为接收参数,避免依赖全局变量 def process_topping(topping): if topping in available_toppings: print(f"Adding {topping}..") else: print(f"Sorry, {topping} is not available!") while True: # 将配料输入移至循环内部,每次循环获取新输入 requested_topping = input("Please choose your topping:\n").strip().lower() process_topping(requested_topping) # 简化继续判断逻辑 if input("Do you want to add another topping? (Y/N)\n").strip().upper() == "N": break print("Finished making your pizza!")
修复说明
- 把配料输入语句移到
while True循环内部,确保每次循环都能让用户输入新的配料。 - 将原
program()函数改为接收参数的process_topping(),消除对全局变量的依赖,代码逻辑更清晰、健壮。 - 优化可选配料的打印逻辑,使用
join方法动态生成列表内容,即使后续修改available_toppings的长度也无需调整打印代码。 - 简化是否继续添加的判断逻辑,仅保留
upper() == "N"的有效转换,避免冗余操作。
内容的提问来源于stack exchange,提问作者cryptoboomer
相关产品推荐
相关产品推荐

