0

私はPythonでプログラムを書いています。このプログラムは、ユーザーの誕生日の入力を受け取り、西部と中国の星座を出力します。今、私はただ中国の看板を機能させようとしています。これはこれまでの私のコードです:

ZODIAC = [(1900, "Rat"), (1901, "Ox"), (1902, "Tiger"), (1903, "Rabbit"), (1904\
, "Dragon"), (1905, "Snake"), (1906, "Horse"), (1907, "Sheep"), (1908, "Monkey"\
), (1909, "Rooster"), (1910, "Dog"), (1911, "Pig")]

def getChineseZodiac(year):
    for i in ZODIAC:
        if (year - ZODIAC[i]) % 12 == 0:
            return ZODIAC[i]

year = input("Enter a year: ")
getChineseZodiac(year)

このコードで実行したいのは、ZODIACでこれらの各年を実行し、モジュラス0と一致するものを見つけて、添付された文字列を返すことです。しかし、私が得るエラーはですTypeError: list indices must be integers, not tuple。どうすればこれを解決できますか?ZODIACに他のフォーマットを使用することになっていますか?

4

3 に答える 3

2

取得している例外は、リストのインデックス作成方法が原因です。インデックスではなく、ZODIACのメンバーにfor i in ZODIAC設定します。その場合、使用して意味をなすiことができません。ZODIAC[i]代わりに、i直接使用してください(この場合、を使用しi[0]iいた2つのケースの代わりにを使用してZODIAC[i])。または、インデックスを反復処理する場合は、ループを変更してを使用しますfor i in range(len(ZODIAC))

ただし、問題全体を単純化することはできます。リスト内の符号は順番に並んでいるため、リストの値を繰り返してそれぞれをテストするのではなく、1つのモジュラス計算を実行して、それをリストのインデックスとして使用できます。

def getChineseZodiac(year):
    index = (year - ZODIAC[0][0]) % 12
    return ZODIAC[index]       # or ZODIAC[index][1], depending on what you want
于 2012-10-09T02:06:21.560 に答える
1

for i in ZODIAC、iは、タプルであるリストZODIACの各要素を表します。iを印刷すると、リストに追加した各タプルを確認できます。

ZODIAC[i]、iは整数である必要があるインデックスです。

ZODIAC[i][0]年(int)ZODIAC[i][1]を取得したり、干支を取得したりするために使用できます。

これを行うには、辞書を使用できます。

ZODIAC = { 1900:"Rat", 1901:"Ox", 1902:"Tiger", 1903:"Rabbit", ... }
def getChineseZodiac(year):
    index = 1900 + (year - 1900) % 12
    return ZODIAC[index]
于 2012-10-09T02:17:26.510 に答える
0

JavaScriptとは異なり、Pythonでシーケンスを反復処理すると、位置ではなく要素が生成されます。インデックス作成に使用iする代わりに、直接使用しますZODIAC

>>> for i in ZODIAC:
...   print i
... 
(1900, 'Rat')
(1901, 'Ox')
(1902, 'Tiger')
(1903, 'Rabbit')
(1904, 'Dragon')
(1905, 'Snake')
(1906, 'Horse')
(1907, 'Sheep')
(1908, 'Monkey')
(1909, 'Rooster')
(1910, 'Dog')
(1911, 'Pig')
于 2012-10-09T02:00:11.537 に答える