在我的程序中,我掌握了当前时间。然后,我想检查当前时间是否大于t1且小于t2。 例如:
00,00 <= dt.time() <= 06,00
06,01 <= dt.time() <= 12,00
12,01 <= dt.time() <= 18,00
etc...
我正在做的是检查当前时间是一天中的哪个时段。
如果4条语句中的一条最终为真,则我的程序将继续执行另一个函数。
现在,我的程序的行为就像所有4条语句都正确,并且循环了几次。
当我打印所有内容以查看其功能时,看起来好像只是将t1中的4个对象中的每一个与t2中4个对象中的最后一个进行了比较。
有没有办法正确地做到这一点?
这是我正在从事的工作...
from datetime import datetime, date, time
p1 = 1
p2 = 2
p3 = 3
p4 = 4
what_number_should_be = 3
def cycle():
dt = datetime.now()
t1 = [time(00,00), time(06,01), time(12,01), time(18,01)]
t2 = [time(06,00), time(12,00), time(18,00), time(23,59)]
user_number = [p1, p2, p3, p4]
# I think the next 3 lines are throwing me off
for x in t1:
for y in t2:
for z in user_number:
# check if current date is between times listed in t1 and t2
if x <= dt.time() <= y:
print(x, dt.time(), y)
print(z)
# if above is true, then check
# if user_number does not equal 3
if what_number_should_be != z:
print(z, " did not equal ", what_number_should_be)
# should only end up here once
cycle()
答案 0 :(得分:1)
如果我对问题的理解正确,则可以用
替换3个for
循环
for x, y, z in zip(t1, t2, user_number):
。
Zip为您提供每个列表中的相应元素: zip Documentation
答案 1 :(得分:1)
您可以将t1,t2和user_number数组压缩在一起,这将产生一个元组列表
[(time(00,00), time(06,00), p1), (time(06,01), time(12,00), p2), (time(12,01), time(18,00), p3), (time(18,01), time(23,59), p4)]
然后像这样运行循环
for x in zip(t1, t2, user_number):
if x[0] <= dt.time() <= x[1]:
print(x[0], dt.time(), x[1])
print(x[2])
if what_number_should_be != x[2]:
print(x[2], " did not equal ", what_number_should_be)
答案 2 :(得分:0)
如果我正确理解,对于给定的时间dt
,您想确定其所在日期的“象限”,您已选择用以下方式对其进行编码:
dt
在00,00到06,00之间,则它位于象限1
dt
介于06,01和12,00之间,则它位于象限2
dt
介于12,01和18,00之间,则它位于象限3
dt
介于18,01和23,59之间,则它位于象限4
我还收集到您希望您的for循环仅打印3
,因为您恰巧在12,01到18,00之间实时运行此程序。
如果我对问题的理解是正确的,那么您使用两个数组来完成此任务很聪明,我们可以使用它们来发现解决方案。通过观察到,由于我们要检查的确有4个象限,因此我们可以推断出仅需要迭代4次,每个象限一次即可。
可以这样写:
dt
我希望这会有所帮助!