2017-01-31 8 views
1

私はカレンダーを作成し、平日のいずれかのタイムスロットをスケジュールしようとしています。PythonカレンダーTypeError

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はindices_をタプルすることはできません。私はしばらく時間をとり、あなたのコードの論理を再考することをお勧めします。問題がある場合は、[公式の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)に電話をかけているのですか。それに何か2つの値が列挙されていますか? (私は可読性のためにiからhourに変更するかもしれません)。これは、インデックスと値をペアで取得するためです。

あなたはタイムテーブルと同じ操作を行うことができます。

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

ありがとう、それは働いた!上記と同じ解決策。 – skyrocker

関連する問題