[英]Looping through multiple lists?
在我的程序中,我掌握了當前時間。 然后,我想檢查當前時間是否大於t1且小於t2。 例如:
00,00 <= dt.time() <= 06,00
06,01 <= dt.time() <= 12,00
12,01 <= dt.time() <= 18,00
etc...
我正在做的是檢查當前時間是哪一天的時間。
如果4個語句中的一個最終為true,則我的程序將轉到另一個函數。
現在,我的程序的行為就像所有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()
您可以將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)
如果我正確理解,對於給定的時間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之間實時運行此程序。
如果我對問題的理解是正確的,則可以聰明地使用兩個數組來完成此任務,我們可以使用它們來發現解決方案。 通過觀察,因為我們要檢查dt
是否包含4個象限,所以我們可以推斷出只需要重復4次,每個象限重復一次。
可以這樣寫:
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)]
for quadrant in range(4):
if (t1[quadrant] <= dt and dt <= t2[quadrant]):
print("The current time is in quadrant: {0}".format(quadrant))
我希望這會有所幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.