如何使用Python找出两个日期之间的年差异?(如果一个人年满18岁就计算出来)

2024-04-25 00:21:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是,如果有人能帮我调试这段代码:

import datetime
print ("What is your date of birth? ")
dateofbirth = input("Please type your date of birth in a YYYY-MM-DD format ")
year, month, day = map(int, dateofbirth.split('-'))
dateofbirth1 = datetime.date(year, month, day)
today = datetime.date.today()
open('dateutil.tar').read()
from dateutil.relativedelta import relativedelta
difference_in_years = relativedelta(today, dateofbirth1).years
if difference_in_years < 18
print ("Sorry, you are not eligible to vote.")
else
print ("You are over 18 and thus eligible to vote.")

我的目标是尝试编写一段代码,可以计算出某人是否年满18岁,从而有资格投票。这意味着要实现这一点,要求此人输入他们的出生日期,然后计算出他们的出生日期和今天的日期之间的年数差,然后使用IF语句告诉他们是否能够投票(即,如果年的差异大于或小于18)。在

目前我在调试这段代码时遇到了几个问题。首先,在第10行有一个语法错误,我不知道如何纠正。其次,如果删除最后4行代码并再次运行代码,则会出现以下错误:

^{pr2}$

然而,在所有的可能性,还有其他的错误,我目前无法弥补。可悲的是,由于我是一个非常新的编程,我的知识和经验不是很大,所以任何帮助将不胜感激!在尝试研究解决方案时,我试图使用我不熟悉的编码,所以请纠正我的错误。在

提前非常感谢!在


Tags: of代码inimportyourtodaydatetimedate
2条回答

您得到UnicodeDecodeError的原因是您试图打开并读取一个tarball-也就是说,一个二进制文件,就好像它是一个文本文件一样。

当您这样做时,Python会尝试解释该文件的任意字节,就好像它们代表了默认字符集(cp1252)中的字符一样,但如果幸运的话,这将给您一个异常,如果您不幸运,则会成功地为您提供完整的垃圾。尝试在文本编辑器中打开dateutil.tar,看看它作为文本有多有意义。

很难说如何修复这个问题,因为不清楚为什么要首先打开并读取该文件。正如jonrsharpe指出的那样,您没有对结果做任何操作。我无法想象你会用它们做什么。

如果您试图使dateutil变得可导入,那么这样做的方法不是对脚本中的tarball执行任何操作,而是在运行该模块之前安装该模块,该模块是从脚本外部执行的。最简单的方法就是pip install dateutil,它将自动找到dateutil的正确版本,下载、解包并安装它以供所有脚本使用。

也就是说,这里真的没有必要dateutil。如果只减去两个datetime对象,就得到一个timedelta对象。


同时,SyntaxError来自以下代码:

if difference_in_years < 18
print ("Sorry, you are not elegible to vote.")
else
print ("You are over 18 and thus elegible to vote.")

在Python中,像ifelse这样的复合语句在suite之前需要一个冒号,并且必须缩进该套件。请参阅教程的First Steps Towards Programming部分。所以:

^{pr2}$

(还请注意,我删除了括号前的空格,以适应PEP 8样式,并正确拼写了“qualified”。)

如果不使用dateutils模块,您可以计算出某人18岁的最晚出生日期。因此,您甚至不需要解压缩tarball或真正担心额外的代码。这里有一个简单的例子来计算一个人18岁的出生日期。

import datetime

now = datetime.datetime.today()   # Get a datetime object for today

days = (365 * 18) + (18 / 4)  # calculate days to go back along with leap years
back18 = now - datetime.timedelta(days=days)   # create another datetime object that represents the date the user needs to be to be 18.

然后,当您从它们的输入创建一个datetime对象时,您可以对它们进行比较。

^{pr2}$

相关问题 更多 >