Python 如何正确比较时间(以分钟和小时表示)?
给定 变量,确定分配是否仍然合格 提交。如果时间 由当前小时、当前分钟和 当前_段在到期时间表示的时间之前, 到期日分钟和到期日部分 我的代码是Python 如何正确比较时间(以分钟和小时表示)?,python,Python,给定 变量,确定分配是否仍然合格 提交。如果时间 由当前小时、当前分钟和 当前_段在到期时间表示的时间之前, 到期日分钟和到期日部分 我的代码是 current_hour = 12 current_minute = 37 current_section = "PM" due_hour = 9 due_minute = 0 due_section = "AM" total_min_cur=((当前小时*60)+当前分钟) 总最小到期日=((到期日小时*60)+到期日分钟) 打印((总最小当前=当
current_hour = 12
current_minute = 37
current_section = "PM"
due_hour = 9
due_minute = 0
due_section = "AM"
total_min_cur=((当前小时*60)+当前分钟)
总最小到期日=((到期日小时*60)+到期日分钟)
打印((总最小当前=当前部分))
我们使用due\u minute=0、current\u hour=12、current\u minute=37、due\u section=“AM”、due\u hour=9、current\u section=“AM”测试了您的代码。我们希望您的代码打印以下内容:
真的
然而,它打印了以下内容:
False首先对字符串执行
当前时间12=
<代码>AM
不大于PM
(按字母顺序排列)。所以False和False
是False
其次,比较字符串是危险的,因为:
total_min_cur=((current_hour*60)+current_minute)
total_min_due=((due_hour*60)+due_minute)
print((total_min_cur<=total_min_due) and (due_section >= current_section) )
[1]中的:“am”<“pm”
Out[1]:正确
在[2]中:“上午”<“下午”
Out[2]:False
您应该执行此打印((总计\分钟\当前>总计\分钟\到期)和(到期\部分<当前\部分))
,您将得到真值
。
将due_section
和current_section
更改为枚举、对象或布尔值(es:morning=True
)。
或者至少转换为相同的大小写
s.lower()
尝试在24小时内转换解决方案,然后比较结果。
当到期日部分和当前日部分对于您的案例都相等时。您的程序将在11:59之前对所有total_min_cur和total_min_到期时间正确。在此之后,您的程序将考虑total_min_cur>total_min_due,但实际上情况正好相反 库纳尔是正确的。12:01 AM比时钟上的1:01 AM早得多。军事时间是00:01对01:01。这是你应该做的事情
In [1]: "am" < "pm"
Out[1]: True
In [2]: "am" < "Pm"
Out[2]: False
total\u min\u cur=(当前时间%12)*60+当前时间
总到期时间=(到期时间%12)*60+到期时间
打印(当前_段<到期_段或(当前_段==到期_段和当前_时间<到期_时间))
这将有助于解决问题
total_min_cur = (current_hour % 12) * 60 + current_minute
total_min_due = (due_hour % 12) * 60 + due_minute
print(current_section < due_section or (current_section == due_section and current_time < due_time))
current_hour=12
当前分钟=37
当前节=“PM”
到期时间=9小时
到期日/分钟=0
到期日
如果当前_段==“AM”和当前_小时==12:
当前时间24=0+当前分钟
#打印(当前时间24)
elif current_section==“AM”:
当前时间24=当前小时*60+当前分钟
#打印(当前时间24)
elif当前_段==“PM”:
当前时间24=(当前小时+12)*60+当前分钟
#打印(当前时间24)
如果到期时间段=“上午”和到期时间==12:
到期时间24=0+到期分钟
#打印(到期时间24)
elif due_section==“AM”:
到期时间24=到期时间*60+到期分钟
#打印(到期时间24)
elif到期日部分==“PM”:
到期时间24=(到期时间+12)*60+到期分钟
#打印(到期时间24)
打印(current_time_24如图所示,您的代码的前两行是不相关的,它们更新的变量都没有在print
语句中使用。我不知道您期望的是什么。请编辑标题以解释您的问题-这将使您的问题可搜索(通过一些关键字比“what's Out”更有意义)例如,如何正确比较时间(以分钟和小时表示)(选择最适合您实际需要的措辞)。我想检查我是否可以提交作业,即到期时间仍然大于当前时间uhh可能是因为当前部分
应该是'AM'
而不是'PM'
(如代码中所示)我在edx平台上编写了这个逻辑,他们对它进行了测试并给出了输出,我的逻辑正确吗?我认为AM和PM是内置函数,起初我使用==但运行后我将其更改为>=P。S:我可以只使用逻辑运算符和变量、数学运算符来解决这个问题吗?是的,你可以,但其他人很难理解:)。如果将current_section
更改为current_section.lower()
,则可以使用逻辑操作数,对于due_section
,如果不能这样做,则可以假设输入为大写(或小写)。请记住,可以使用德摩根定律将和更改为或。
current_hour = 12
current_minute = 37
current_section = "PM"
due_hour = 9
due_minute = 0
due_section = "AM"
if current_section=="AM" and current_hour==12:
current_time_24=0+current_minute
# print(current_time_24)
elif current_section=="AM":
current_time_24=current_hour*60+current_minute
# print(current_time_24)
elif current_section=="PM":
current_time_24=(current_hour+12)*60+current_minute
# print(current_time_24)
if due_section=="AM" and due_hour==12:
due_time_24=0+due_minute
# print(due_time_24)
elif due_section=="AM":
due_time_24=due_hour*60+due_minute
# print(due_time_24)
elif due_section=="PM":
due_time_24=(due_hour+12)*60+due_minute
# print(due_time_24)
print(current_time_24<due_time_24)