Python如何通过字典取值计算含小费的拿铁订单总费用
拿铁订单总金额计算实现(Python字典练习题)
核心要求
- 以字典结构存储拿铁杯型与对应售价:
- Short:2.10美元
- Tall:2.95美元
- Grande:3.65美元
- Venti:4.15美元
- 遍历字典,按指定格式打印全量杯型价目表
- 接收用户输入的杯型选择、小费百分比,将杯型对应售价乘以小费比例计算含小费总金额,格式化输出结果
原有代码问题
- 执行顺序错误:未完成字典组装、未打印价目表就提前引导用户输入,用户看不到可选选项
- 价目打印格式不符合要求:未添加美元符号、未固定保留两位小数
- 缺失核心取值逻辑:未根据用户选择的杯型从字典中取出对应基础售价
- 总金额输出逻辑错误:打印价目的函数无返回值,直接传入格式化语句会得到空值
修正后完整代码
def print_menu(price_dict): # 遍历字典按要求格式打印价目表,价格固定保留两位小数 for size, price in price_dict.items(): print(f"{size} latte: ${price:.2f}") # 初始化杯型-售价字典 latte_prices = {} sizes = ['Short', 'Tall', 'Grande', 'Venti'] prices = [2.10, 2.95, 3.65, 4.15] for size, price in zip(sizes, prices): latte_prices[size] = price # 先打印价目表再引导用户输入 print_menu(latte_prices) # 接收用户杯型选择,做简单输入兼容:去除首尾空格、首字母大写匹配字典键 user_choice = input('Please choose a size: ').strip().capitalize() # 简单校验输入合法性 while user_choice not in latte_prices: user_choice = input('Invalid size, please choose from Short/Tall/Grande/Venti: ').strip().capitalize() # 接收小费百分比,转换为计算系数 tip_percent = float(input('How much would you like to tip (enter percentage number, e.g. 15 for 15%)? ')) tip_multiplier = 1 + tip_percent / 100 # 计算总金额:基础售价 * 小费系数,保留两位小数 total_cost = latte_prices[user_choice] * tip_multiplier print('The total cost is ${:.2f}'.format(total_cost))
代码说明
- 调整了执行顺序:先组装字典、打印价目表,再接收用户输入,符合正常交互逻辑
- 打印价目时用
:.2f格式化浮点值,固定显示两位小数,完全匹配题目要求的输出格式 - 增加了简单的输入兼容和校验,避免用户输入空格、小写、无效杯型导致程序报错
- 核心计算逻辑:通过用户输入的杯型作为键,直接从字典中取对应基础价格,乘以转换后的小费系数得到总金额,格式化后输出
内容的提问来源于stack exchange,提问作者Konflux21
相关产品推荐
相关产品推荐

