我想知道输入的出生日期是18岁以上还是18岁以下。
def is_under_18(birth):
now = date.today()
return (
now.year - birth.year < 18
or now.year - birth.year == 18 and (
now.month < birth.month
or now.month == birth.month and now.day <= birth.day
)
)
然后道:
year = int(input("Year born: "))
month = int(input("Month born: "))
day = int(input("Day born: "))`
birth = date(year,month,day)
if is_under_18(birth):
print('Under 18')
else:
print('Adult')
但是,唯一的问题是,假设我添加了一个生日为2004年11月25日的用户。程序允许我添加,因为它不计算月份。如果我添加了一个生日为2005年1月1日的用户,它不允许我添加,因为2022-2005=17。
1条答案
按热度按时间pbwdgjma1#
你的原始代码似乎没有你提到的日期问题,但确实有一个bug,因为2004年11月22日是“18岁以下”,而今天的日期是2022年11月22日(18岁生日)。请使用
now.day < birth.day
代替。但如果你计算生日需要18通过取代今天的年份少18,然后直接比较日期,你不必有一个复杂的比较:
输出量: