我正在用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
。我怎么解决这个问题?
我是不是应该用其他的十二生肖格式?在
在
for i in ZODIAC
中,我表示列表ZODIAC中的每个元素,即tuple。如果打印i,就可以看到列表中的每个元组。在在
ZODIAC[i]
中,i是一个应为整数的指示符。在您可以使用
ZODIAC[i][0]
获得年份(int),使用ZODIAC[i][1]
获得中国十二生肖。在你可以用字典来做这件事。在
您得到的异常是因为您索引列表的方式。}代替使用
for i in ZODIAC
将i
设置为十二宫的一个成员,而不是索引。你不能使用ZODIAC[i]
并让它有意义。相反,直接使用i
(在本例中,通过使用i[0]
和{ZODIAC[i]
的两种情况)。或者,如果您确实想迭代索引,请更改循环以使用for i in range(len(ZODIAC))
。在然而,整个问题可以简化。由于列表中的符号是有序的,因此您可以只进行一次模数计算并将其用作列表的索引,而不是迭代列表值并测试每个值:
与JavaScript不同,在Python中迭代一个序列会产生元素,而不是位置。直接使用
i
,而不是使用它来索引ZODIAC
。在相关问题 更多 >
编程相关推荐