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

如何修复Python程序中下次生日天数计算错误

生日计算程序的天数计算错误问题

我需要编写一个Python程序,实现两个功能:计算生日对应的星期几,以及距离下次生日的天数。程序多数情况下运行正常,但偶尔会出现天数计算偏多的错误。例如:当前日期为10月11日,到次年6月23日实际应为255天,但程序计算结果为259天。

我已尝试咨询AI和上网搜索,但未找到有效解决方案,ChatGPT提供的代码也无法正常工作。

以下是我的代码:

year = 0
month = 0
day = 0
birthday_year = 0
birthday_month = 0
birthday_day = 0

#Quick way to add blank line
def blank_line(stripes):
    if stripes == 0:
        stripes = 55
    print(stripes * "-")

#Lists for showing what day/month it is.
weekdays = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]
months = ["Januari", "Februari", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

days_per_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

def is_leap_year(year):
    return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)

def days_in_month(month, year):
    if month == 2 and is_leap_year(year) == True:
        return 29
    else:
        return days_per_month[month - 1]

def day_of_the_week(day, month, year):
    if month < 3:
        month = month + 12
        year = year - 1
    k = year % 100
    j = year // 100
    f = day + ((13 * (month + 1)) // 5) + k + (k // 4) + (j // 4) - (2 * j)
    return weekdays[f % 7 - 2]

def calculate_age(birthday_day, birthday_month, birthday_year, current_day, current_month, current_year):
    age_age = current_year - birthday_year
    if (birthday_month > current_month) or (birthday_month == current_month and birthday_day > current_day):
        age_age = age_age - 1
    return age_age

def days_till_next_birthday(birthday_day, birthday_month, current_day, current_month, current_year):
    #Calculates days till next birthday
    if birthday_day >= current_day and birthday_month == current_month:
        days_till = birthday_day - current_day

    elif birthday_month > current_month:
        days_till = days_in_month(current_month, current_year) - current_day
        months_until_birthday = birthday_month - current_month
        for run in range(months_until_birthday - 1):
            run_month = current_month + (run + 1)
            print("run month debug:", run_month)
            days_until_quick_debug = days_till
            days_till = days_till + days_in_month(run_month, current_year)
            print("days in month debug", days_till - days_until_quick_debug)
            print("days until debug", days_till)
        days_till = days_till + birthday_day

    elif birthday_month < current_month:
        days_till = days_in_month(current_month, current_year) - current_day
        months_until_birthday = 12 - current_month + birthday_month
        for run in range(months_until_birthday - 1):
            run_month = current_month + (run + 1)
            if run_month > 12:
                run_month = 1
                current_year = current_year + 1
            print("run month debug", run_month)
            days_until_quick_debug = days_till
            days_till = days_till + days_in_month(run_month, current_year)
            print("days in month debug", days_till - days_until_quick_debug)
            print("days until debug", days_till)
        days_till = days_till + birthday_day

    else:
        print("Error.")
        print("Please try again.")
        quit()

    return days_till

附:我知道使用datetime模块会更简单,但不允许导入任何模块。

感谢您抽出时间阅读,提前感谢您的帮助!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:57:16