You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:57:01