微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python没有检测到两个值相等并一直返回false

如何解决Python没有检测到两个值相等并一直返回false

抱歉,我真的不知道如何解释这一点。我正在尝试创建一个小程序来检测员工是否按时上班。 首先,我将一个浮点数(代表一个小时)转换为一个日期时间值:

 estabHourF=(float(estabHour)+0.18)
 minutes = estabHourF*60
 hours,minutes = divmod(minutes,60)
 print("%02d:%02d"%(hours,minutes))
 todaysYear = datetime.date.today().year
 todaysMonth = datetime.date.today().month
 todaysDay =datetime.date.today().day
 todaysSeconds = datetime.datetime.Now().second

然后,我将所有这些都插入到一个列表中:

NowH = datetime.datetime(todaysYear,todaysMonth,todaysDay,int("%02d"%(hours)),int("%02d"%(minutes)),todaysSeconds)

然后,我创建了另一个列表,该列表创建了类似的时间段,以便我可以将现在与既定的小时进行比较,以便稍后输入:

numMinutes = 15
date_list = [NowH - datetime.timedelta(minutes=x) for x in range(numMinutes)]

如果我打印这个,它是这样的:

datetime.datetime(2021,7,27,9,14,33)

这是它在控制台上的样子。

最后,我试图通过模仿它的样子来比较现在批准的时间列表:

for x in range(len(date_list)):
                if (date_list[checkList])=="datetime.datetime({0},{1},{2},{3},{4},{5})".format(todaysYear,int(datetime.datetime.Now().strftime("%I")),datetime.datetime.Now().minute,todaysSeconds):
                    punctual = True
                    print("Puntual: ",punctual)
                    print(datetime.datetime.Now())
                else:
                    print("datetime.datetime({0},todaysSeconds))
                checkList+=1

是的,如果错误,我希望它显示我正在比较的相同值,而且,不要告诉我这两个不相同。

from my list: datetime.datetime(2021,25,49)
from the print inside "else": datetime.datetime(2021,49)

它们完全相同,但由于我的一些错误,python似乎无法识别它:')

如果你能帮助我,我真的很感激:'3

解决方法

打印时获得的 "datetime.datetime(2021,7,27,9,14,33)" 只是日期时间对象的字符串表示形式。 datetime 对象本身永远不等于该字符串。 您可以使用比较运算符直接比较两个日期时间。

我也不是 100% 确定您的 checklist 变量的用途,但在我看来您正在使用它来迭代 date_list(我没有看到它在您的代码段中初始化尽管)。如果是这种情况,为什么不直接使用 x 甚至更好,您可以直接执行此操作:

for date in date_list:
    if date == nowH:
        #[...]

日期变量将依次直接从您的列表中获取所有值。

您可以定义“最新可接受的日期时间”

lateAfter = nowH + datetime.timedelta(minutes=numMinutes)

然后简单地使用比较运算符来代替您的日期:

if datetime.datetime.now() <= lateAfter:
    punctual = True
    print("Puntual: ",punctual)
    print(datetime.datetime.now())
else: # Not punctual
    print(datetime.datetime.now())
,

我是否正确理解不给您 True 的比较是这样的?

if (date_list[checkList])=="datetime.datetime({0},{1},{2},{3},{4},{5})".format(todaysYear,todaysMonth,todaysDay,int(datetime.datetime.now().strftime("%I")),datetime.datetime.now().minute,todaysSeconds):

抱歉,如果我没有任何意义(新手),但您不是将 str 与日期时间进行比较吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。