我需要一些關于 Python 中 for 回圈的幫助。目前,我正在嘗試創建一個隨機移位生成器,但我還需要對其應用一些規則。現在,我的函式隨機向日歷添加班次,但我想要的是如果最后一個班次是夜班,則增加休息日。但我不太確定如何在 for 回圈中與前一個 'i' 變數進行互動。這是我的代碼:
# Shift types
shifts = {
"morning": "9:00 - 17:00",
"evening": "16:00 - 00:00",
}
day_off = {
"day off": "X"
}
# Schedule
schedule_ll = {
1: [],
2: [],
3: [],
4: [],
5: [],
6: [],
7: [],
8: [],
9: [],
10: [],
11: [],
12: [],
13: [],
14: [],
15: [],
16: [],
17: [],
18: [],
19: [],
20: [],
21: [],
22: [],
23: [],
24: [],
25: [],
27: [],
28: [],
29: [],
30: [],
31: [],
}
# Function to add shifts to schedule randomly
def start_schedule(schedule, shift, day_off):
for i in schedule:
schedule[i].append(random.choice(list(shift.values())))
if schedule[i-1] == ["16:00 - 00:00"]:
schedule[i] = list(day_off.values())
return schedule
print(start_schedule(schedule_ll, shifts, day_off))
所以當我執行這段代碼時,我收到 KeyError: 0 錯誤。我知道這個錯誤是由 schedule[i-1] 引起的,但是我不確定如何讓它以其他方式作業。將不勝感激任何幫助!
uj5u.com熱心網友回復:
您可能希望處理回圈外的第一個元素,然后僅回圈其余元素。或者更簡單,只需將您的 if 更改為
if i>1 and schedule[i-1] == ["16:00 - 00:00"]
順便說一句,請注意,您可以通過理解來創建字典:
schedule = {k:[] for k in range(1,32)}
uj5u.com熱心網友回復:
兩個建議:
- 迭代字典使用
.items() - 添加邏輯以防止
schedule在呼叫之前嘗試訪問不存在的鍵schedule[i - 1]
這使代碼更簡潔,防止函式因關鍵錯誤而崩潰,并檢查所需條件是否在除第一天之外的每一天都成立。
def start_schedule(schedule, shift, day_off):
for day, list_of_shifts in schedule.items():
list_of_shifts.append(random.choice(list(shift.values())))
if (i - 1) in schedule and schedule[i-1] == ["16:00 - 00:00"]:
schedule[i] = list(day_off.values())
return schedule
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/399147.html
