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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:15:26