中国生肖Python程序

时间:2012-10-09 01:57:52

标签: python

我正在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使用其他格式吗?

3 个答案:

答案 0 :(得分:2)

您获得的异常是因为您为列表编制索引的方式。 for i in ZODIACi设置为ZODIAC的成员,而不是索引。然后你不能使用ZODIAC[i]并让它有意义。相反,请直接使用i(在这种情况下,使用i[0]i代替您使用ZODIAC[i]的两种情况。或者,如果您确实希望迭代索引,请将循环更改为使用for i in range(len(ZODIAC))

然而,整个问题可以简化。由于列表中的符号是有序的,因此您只需进行单个模数计算并将其用作列表的索引,而不是迭代列表值并测试每个值:

def getChineseZodiac(year):
    index = (year - ZODIAC[0][0]) % 12
    return ZODIAC[index]       # or ZODIAC[index][1], depending on what you want

答案 1 :(得分:1)

for i in ZODIAC中,i表示列表ZODIAC中的每个元素,即元组。如果你打印i,你可以看到你放在列表中的每个元组。

ZODIAC[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]

答案 2 :(得分: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')