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

如何在Python中实现12月15-22日每日50美元的特定日期奖金

实现圣诞期间行程奖金规则的解决方案

首先需要从结束日期和行程天数推导出行程完整日期范围,再逐一检查每一天是否落在12月15日至22日区间内,统计符合条件的天数计算对应奖金,以下是修改后的完整代码:

修改后的代码

import datetime

# 定义原有奖金常量(可根据实际需求调整)
BONUS_ABOVE_3 = 100
# 圣诞期间每日奖金标准
CHRISTMAS_BONUS_PER_DAY = 50

# 获取结束日期
while True:
    EndDateStr = input("Enter the end date of the trip (YYYY-MM-DD): ")
    if EndDateStr == "":
        print("End date cannot be blank. Please re-enter.")
        continue
    try:
        EndDate = datetime.datetime.strptime(EndDateStr, "%Y-%m-%d")
    except ValueError:
        print("Date must be in YYYY-MM-DD format. Please re-enter.")
        continue
    break

# 获取行程天数并计算奖金
while True:
    DayBonus = 0
    ChristmasBonus = 0
    try:
        NumDaysInput = input("Enter the number of days: ")
        if NumDaysInput == "":
            print("The number of days cannot be blank. Please re-enter.")
            continue
        NumDays = int(NumDaysInput)
    except ValueError:
        print("Please enter a valid number for days.")
        continue

    if NumDays > 7:
        print("The number of days cannot exceed 7. Please re-enter.")
    elif NumDays < 1:
        print("The number of days must be at least 1. Please re-enter.")
    else:
        # 计算行程起始日期:确保包含首尾两天
        StartDate = EndDate - datetime.timedelta(days=NumDays - 1)
        
        # 生成行程覆盖的所有日期
        trip_dates = [StartDate + datetime.timedelta(days=i) for i in range(NumDays)]
        
        # 统计符合圣诞奖金规则的天数
        for date in trip_dates:
            if date.month == 12 and 15 <= date.day <= 22:
                ChristmasBonus += CHRISTMAS_BONUS_PER_DAY
        
        # 原有奖金规则逻辑
        if NumDays >= 4:
            DayBonus = BONUS_ABOVE_3
        
        # 输出结果
        print(f"原有奖金: ${DayBonus}")
        print(f"圣诞额外奖金: ${ChristmasBonus}")
        print(f"总奖金: ${DayBonus + ChristmasBonus}")
        break

关键逻辑说明

  • 起始日期计算:通过EndDate - timedelta(days=NumDays-1)得到行程第一天,保证行程包含起始和结束日期(比如结束日期为2024-12-16、天数2时,起始日期为2024-12-15)。
  • 日期校验:遍历行程每一天,判断是否为12月15日至22日,符合条件则累加每日50美元奖金。
  • 输入优化:补充了天数为空、非数字的校验,以及天数不能小于1的边界判断。
  • 奖金分离:原有DayBonus与新的ChristmasBonus分开计算,可按需叠加输出总奖金。

跨年度情况处理

若行程跨年度(如12月21日出发、天数3,结束日期为次年1月1日),代码会自动识别12月21、22日并计算对应奖金,无需额外修改。

内容的提问来源于stack exchange,提问作者jonahpocalypse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:31:05