Ich schreibe ein Programm in Python, das die Eingabe zum Geburtstag des Benutzers und die Ausgabe seines westlichen und chinesischen Sternzeichens übernimmt. Im Moment versuche ich nur, das chinesische Zeichen zum Laufen zu bringen. Dies ist mein bisheriger Code:
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)
Ich hoffe, dass dieser Code jedes dieser Jahre in ZODIAC durchläuft, eine Übereinstimmung mit Modul 0 findet und dann die angehängte Zeichenfolge zurückgibt. Aber der Fehler, den ich bekomme, ist TypeError: list indices must be integers, not tuple
. Wie löse ich das? Soll ich ein anderes Format für ZODIAC verwenden?
3 Antworten
Die Ausnahme, die Sie erhalten, ist die Art und Weise, wie Sie die Liste indizieren. for i in ZODIAC
setzt i
auf ein Mitglied von ZODIAC, nicht auf einen Index. Sie können dann ZODIAC[i]
nicht verwenden und es sinnvoll machen. Verwenden Sie stattdessen i
direkt (in diesem Fall i[0]
und i
anstelle der beiden Fälle, in denen Sie ZODIAC[i]
verwendet haben). Wenn Sie alternativ über Indizes iterieren möchten, ändern Sie alternativ Ihre Schleife in for i in range(len(ZODIAC))
.
Das ganze Problem kann jedoch vereinfacht werden. Da die Vorzeichen in Ihrer Liste in Ordnung sind, können Sie nur eine einzige Modulberechnung durchführen und diese als Index für die Liste verwenden, anstatt die Listenwerte zu durchlaufen und jeden einzelnen zu testen:
def getChineseZodiac(year):
index = (year - ZODIAC[0][0]) % 12
return ZODIAC[index] # or ZODIAC[index][1], depending on what you want
Im Gegensatz zu JavaScript liefert das Durchlaufen einer Sequenz in Python Elemente und keine Positionen. Verwenden Sie i
direkt, anstatt ZODIAC
zu indizieren.
>>> 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')
In for i in ZODIAC
repräsentiert i jedes Element in der Liste ZODIAC, das Tupel ist. Wenn Sie i drucken, können Sie jedes Tupel sehen, das Sie in die Liste aufgenommen haben.
In ZODIAC[i]
ist i ein Index, der eine ganze Zahl sein sollte.
Sie können ZODIAC[i][0]
verwenden, um das Jahr (int) zu erhalten, und ZODIAC[i][1]
, um das chinesische Sternzeichen zu erhalten.
Sie können dazu ein Wörterbuch verwenden.
ZODIAC = { 1900:"Rat", 1901:"Ox", 1902:"Tiger", 1903:"Rabbit", ... }
def getChineseZodiac(year):
index = 1900 + (year - 1900) % 12
return ZODIAC[index]
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.