Python咖啡店点单程序get_drink_type重复弹出问题如何解决
问题解决:咖啡店点单程序饮品选择弹窗重复问题
问题原因
- 你在
get_size()函数内部错误提前调用了get_drink_type(),当程序执行完get_size()回到主流程后,主流程又会执行一次get_drink_type(),是两次弹窗的核心诱因。 - 原有逻辑通过两个函数互相递归调用实现返回重选,嵌套的调用栈会导致上层函数的剩余代码继续执行,进一步放大重复调用问题。
修复方案
第一步:修改get_size函数,删除所有多余的饮品选择相关代码
get_size仅负责处理尺寸选择逻辑即可,无需关联饮品选择:
def get_size(): res = input('What size drink can I get for you? \n[a] Small \n[b] Medium \n[c] Large \n> ') if res == 'a': return 'small' elif res == 'b': return 'medium' elif res == 'c': return 'large' else: print_message() return get_size()
第二步:修改get_drink_type的返回逻辑,不再直接递归调用get_size
用户选择返回重选尺寸时,返回标记值告知外层流程处理,避免嵌套递归:
def get_drink_type(): kind = input('What type of drink would you like? \n[a] Brewed Coffee \n[b] Mocha \n[c] Latte \n[d] Return to the size \n> ') if kind == 'a': return 'brewed coffee' elif kind == 'b': return 'mocha' elif kind == 'c': return order_latte() elif kind == 'd': # 返回重选标记,交给外层循环处理 return 'redo_size' else: print_message() return get_drink_type()
第三步:在主流程增加循环处理返回重选逻辑
调整coffee_bot函数中尺寸、饮品选择的部分,用循环处理返回重选需求:
def coffee_bot(): print('''Welcome to the cafe!''') name = input('Can I get you name pls? \n> ') # 新增循环处理返回重选逻辑 while True: size = get_size() drink_type = get_drink_type() if drink_type != 'redo_size': # 无需重选则跳出循环 break # 后续价格计算、甜点选择、订单输出逻辑和原有代码保持一致即可
其余函数(order_latte、get_desert、甜点相关的选择函数)无需修改,调整后饮品选择弹窗仅会弹出一次,返回重选尺寸的功能也可正常运行。
内容的提问来源于stack exchange,提问作者Maxor
相关产品推荐
相关产品推荐

