中国十二生肖Python节目

2024-06-28 19:52:09 发布

您现在位置: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)

我希望这段代码能做的是在十二生肖中运行每一年,找到一个模数为0的匹配项,然后返回附加的字符串。但我得到的错误是TypeError: list indices must be integers, not tuple。我怎么解决这个问题? 我是不是应该用其他的十二生肖格式?在


Tags: 代码用户程序yearoxrabbittigersnake
3条回答

for i in ZODIAC中,我表示列表ZODIAC中的每个元素,即tuple。如果打印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]

您得到的异常是因为您索引列表的方式。for i in ZODIACi设置为十二宫的一个成员,而不是索引。你不能使用ZODIAC[i]并让它有意义。相反,直接使用i(在本例中,通过使用i[0]和{}代替使用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

与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')

相关问题 更多 >