航班预订系统最终汇总计算异常问题咨询
航班预订系统汇总错误的问题排查与修复
我帮你梳理了代码里的几个关键问题,这些正是导致最终汇总结果不正确的原因:
问题1:剩余座位计算逻辑混乱
你在每次会话里先计算了当前会话后的剩余座位seats_left = availble_seats - child_ticket - adult_ticket,但紧接着又执行了seats_left = seats_left - t_total_s,这相当于重复扣除了所有已售出的票数,导致剩余座位数越算越少,完全不符合实际。而且你没有更新全局的可用座位变量availble_seats,每次会话都用初始的152来计算,也会导致后续会话的座位判断不准确。
问题2:总销售额没有累加
你定义的t_adult、t_child、t_total变量,每次会话都会被重新赋值为当前会话的成人票销售额、儿童票销售额和总销售额,而不是累加所有会话的金额。所以最终汇总时,这些变量只保存了最后一次会话的销售数据,不是所有会话的总和。
问题3:总销售额变量未初始化
你没有在代码开头初始化t_adult、t_child、t_total这几个总销售额变量,虽然Python会自动处理,但这是不规范的,也容易引发逻辑错误。
修正后的完整代码
adult_price = 120 child_price = 60 available_seats = 152 # 修正拼写错误:availble → available # 初始化汇总统计变量 t_adult_s_s = 0 # 总售出成人票数 t_child_s_s = 0 # 总售出儿童票数 t_total_s = 0 # 总售出票数 t_adult = 0 # 成人票总销售额 t_child = 0 # 儿童票总销售额 t_total = 0 # 票务总销售额 while True: print("*****************************************") print(" 欢迎来到Freezy Jet航空公司 ") print("*****************************************") print(f"我们共有{available_seats}个可预订座位") # 显示实时剩余可用座位 print("- - - - - - - - - - - - - - - - - - - - ") print("成人票单价为£120") print("儿童票单价为£60") print("*****************************************") # 输入成人票数量 while True: try: adult_ticket = int(input("请问您需要购买多少张成人票? ")) except ValueError: print("请重试,输入有效的数字") continue if adult_ticket < 0: print("请输入正数重新预订") continue else: break # 输入儿童票数量 while True: try: child_ticket = int(input("请问您需要购买多少张儿童票? ")) except ValueError: print("请重试,输入有效的数字") continue if child_ticket < 0: print("请输入正数重新预订") continue else: break total_ticket = adult_ticket + child_ticket if total_ticket > available_seats: # 用实时可用座位判断,不是固定152 print("由于座位数量有限,我们无法为您提供该数量的票务服务") print("请减少购票数量后重试\n") continue else: print("- - - - - - - - - - - - - - - - - - - - - - - - - ") print(" 会话汇总 ") print("已购买成人票数量:", adult_ticket) print("已购买儿童票数量:", child_ticket) total_tickets_purchased = adult_ticket + child_ticket print("已购买总票数:", total_tickets_purchased) print("****************************************************") # 当前会话的费用计算 adult_cost = adult_price * adult_ticket child_cost = child_price * child_ticket total_cost = adult_cost + child_cost print("成人票总费用:", adult_cost) print("儿童票总费用:", child_cost) print("票务总费用:", total_cost) # 更新全局可用座位 available_seats -= total_tickets_purchased print("剩余座位数:", available_seats) # 累加汇总统计数据 t_adult_s_s += adult_ticket t_child_s_s += child_ticket t_total_s = t_adult_s_s + t_child_s_s t_adult += adult_cost t_child += child_cost t_total = t_adult + t_child # 询问用户是否继续 question = input("\n按's'键停止,按其他键继续 ") if question.lower() == 's': # 兼容大小写输入 break # 最终汇总 print("\n- - - - - - - - - - - - - - - - - - - - - - - - - ") print(" 最终汇总 ") print("已售出成人票总数:", t_adult_s_s) print("已售出儿童票总数:", t_child_s_s) print("已售出总票数:", t_total_s) print("***************************************************") print("剩余座位数:", available_seats) print("成人票总销售额:", t_adult) print("儿童票总销售额:", t_child) print("票务总销售额:", t_total) print("END")
主要修改说明
- 修正变量拼写:把
availble_seats改为available_seats,避免拼写错误导致的逻辑问题。 - 初始化总销售额变量:在开头新增
t_adult、t_child、t_total的初始化,确保从0开始累加。 - 实时更新可用座位:每次会话成功购票后,直接更新
available_seats,后续会话判断座位时用最新的剩余座位数,同时剩余座位显示也更准确。 - 正确累加销售额:把
t_adult += adult_cost这类累加操作替代原来的重新赋值,确保所有会话的销售额都被汇总。 - 优化用户输入体验:把错误提示信息更清晰,同时支持小写/大写's'来停止程序。
- 移除错误的剩余座位计算:删掉了
seats_left = seats_left - t_total_s这行错误代码,改用实时更新的available_seats来显示剩余座位。
这样修改后,最终的汇总数据就会准确累加所有会话的购票信息啦!
内容的提问来源于stack exchange,提问作者user11003285
相关产品推荐
相关产品推荐

