Python售票奖励程序调试:无法触发首日奖励且循环异常
Python售票奖励程序修复:循环无法终止+奖励不触发问题
问题分析
原代码存在以下关键错误导致程序异常:
- 循环变量名大小写错误:初始化的循环控制变量是
getMoreSales(驼峰式),但后续输入时写成了getmoreSales(小写m),导致getMoreSales始终保持初始值"y",循环永远无法终止。 - FAST STARTER奖励条件错误:
dayOneSales是input()返回的字符串类型,未转成整数就做数值判断;条件dayOneSales == 30>0逻辑完全错误,实际会先计算30>0得到True,再判断字符串是否等于布尔值True,永远不会触发奖励。正确条件应为int(dayOneSales) > 30。 - 缩进错误:
while循环内部代码、if语句对应的print语句均未缩进,Python无法识别代码块;末尾的else与while缩进不匹配,无法触发循环结束后的团队总销量输出。 - 总销量奖励逻辑不合理:原代码判断
memberSales == 41等精确值,实际应改为区间判断(比如销量≥41得卫衣),否则只有刚好卖出指定数量才会获奖,不符合业务逻辑。 - 输出逻辑混乱:仅当销量为0时才输出
prize awarded is:,格式不统一且逻辑颠倒。
修复后的代码
# The program awards team member prizes based on total ticket sales # Team member total sales and prize awards are printed to the computer screen # The program terminates when the user does not enter a 'y' or 'Y' to continue getMoreSales = "y" teamSales = 0 # Create a while loop to process all of the team members while getMoreSales.lower() == "y": # Set starting values for program variables dayOneSales = 0 dayTwoSales = 0 dayThreeSales = 0 memberSales = 0 prizeEarned = "" # Get sales information print(" ") teamMemberName = input("Enter the team member's first name: ") # 处理非数字输入的合法性校验 while True: try: dayOneSales = int(input("Enter the day 1 ticket sales: ")) break except ValueError: print("请输入有效的数字!") while True: try: dayTwoSales = int(input("Enter the day 2 ticket sales: ")) break except ValueError: print("请输入有效的数字!") while True: try: dayThreeSales = int(input("Enter the day 3 ticket sales: ")) break except ValueError: print("请输入有效的数字!") memberSales = dayOneSales + dayTwoSales + dayThreeSales teamSales += memberSales # Determine Prize based on total tickets sold # 触发FAST STARTER奖励 if dayOneSales > 30: print(f"{teamMemberName} gets a FAST STARTER! button for selling {dayOneSales} tickets on the first day!") # 总销量奖励区间判断 if memberSales >= 41: prizeEarned = 'Team Sweat Shirt!' elif memberSales >= 31: prizeEarned = 'Team Tee Shirt!' elif memberSales >= 21: prizeEarned = 'Miniature volley ball!' elif memberSales >= 11: prizeEarned = 'Plastic mug!' elif memberSales >= 1: prizeEarned = 'Cup Holder!' else: prizeEarned = "Team members must sell at least one ticket to get a prize" # 统一输出格式 print(f"{teamMemberName} sold {memberSales} tickets") print(f"Prize awarded is: {prizeEarned}") # Check if program should end getMoreSales = input("Enter y to enter more sales or n to end the program: ") # At the end of the program print total sales for the team print(f"The total ticket sales for the team were: {teamSales}")
修复说明
- 统一循环控制变量名,用
.lower()兼容大小写输入,解决循环无法终止问题; - 将
dayOneSales转为整数,修正FAST STARTER奖励的触发条件; - 修正所有代码块的缩进,符合Python语法要求;
- 将精确值判断改为区间判断,贴合实际业务场景;
- 添加输入合法性校验,避免非数字输入导致程序崩溃;
- 使用f-string简化字符串拼接,统一输出格式。
内容的提问来源于stack exchange,提问作者Elizabeth farriell
相关产品推荐
相关产品推荐

