2017-01-31 105 views
1

我正在嘗試創建日曆併爲其中一個工作日安排時間。Python日曆類型錯誤

timetable = [[""] * 24 for day in range(7)] 

timetable[0][15] = "meeting with Jane" 

# first let's define weekday names 
WEEKDAYS = ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 
'Saturday', 'Sunday') 

# now we iterate over each day in the timetable 

for day in timetable: 

# and over each timeslot in each day 

day_name = WEEKDAYS[day] 

    for i, event in enumerate(day): 
     if event: # if the slot is not an empty string 
     print("%s at %02d:00 -- %s" % (day_name, i, event)) 

我得到的錯誤:

day_name = WEEKDAYS[day] 
TypeError: tuple indices must be integers, not list 

據我所知,「天」被作爲一個列表,元組,這是造成這個錯誤,但我應做什麼修改,我的代碼來解決這個傳遞?

+2

想想什麼是'timeable' _actually_(_hint_:這是列表的列表)。即使你遍歷了每個_nested_列表,但你仍然有問題。 _strings不能是元組index_。我建議花點時間重新思考你的代碼的邏輯。如果遇到問題,請閱讀[官方Python教程](https://docs.python.org/3.5/tutorial/)。 –

+0

@leaf你是對的。它是一個列表清單。我是python的新手,所以不知道很多東西。我認爲應該有外部for循環中的另一個變量,它可以作爲索引傳遞給元組,但我不知道該怎麼做。 – skyrocker

+0

查看我上面評論的最新編輯。 –

回答

3

使用更多enumerate

for index, day in enumerate(timetable): 
    day_name = WEEKDAYS[index] 
    for i, event in enumerate(day): 
     if event: # if the slot is not an empty string 
      print("%s at %02d:00 -- %s" % (day_name, i, event)) 
+0

完美!有效!非常感謝 – skyrocker

2

你爲什麼打電話給enumerate(day),它列舉的兩個值是什麼? (爲了便於閱讀,我可能會將i更改爲hour)。您正在執行此操作以成對獲取索引和值。

你可以做同樣的時間表:

for day, agenda in enumerate(timetable): 
    day_name = WEEKDAYS[day] 
    for hour, event in enumerate(agenda): 
     … 
+0

謝謝,它的工作!同上解決方案。 – skyrocker