如何修复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
相关产品推荐
相关产品推荐

