Ich schreibe eine Python-Version des Brettspiels Onitama, und ich versuche zur Zeit, eine Funktion zu schreiben, um die Karten zu mischen:Index außerhalb des zulässigen Bereichs Fehler in Deck Umordnungsalgorithmus
temp_deck = onitama_deck.deck
print(temp_deck)
print(len(onitama_deck.deck))
print(len(temp_deck))
for i in range(len(temp_deck)):
next_card = temp_deck[random.randrange(0, len(temp_deck))]
deck.deck[i] = next_card
temp_deck.remove(next_card)
print(onitama_deck.deck)
Beide onitama_deck.deck und temp_deck sind Listen, aber wenn ich das Programm mit einem Deck laufen die Werte von 1 bis 10 enthält, erhalte ich die folgende Ausgabe:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
10
10
Traceback (most recent call last):
File "onitama.py", line 33, in <module>
deck.shuffle()
File "onitama.py", line 25, in shuffle
onitama_deck.deck[i] = next_card
IndexError: list assignment index out of range
zuerst habe ich mich gefragt, warum ich war zu groß, so Ich habe versucht, beide Listen zu drucken. Aus irgendeinem Grund Iteration jeweils die niedrigste ungerade Zahl von temp_deck entfernt wird, und dann onitama_deck.deck wird gleich temp_deck, wie folgt aus:
iteration: 1
temp_deck: [2, 3, 4, 5, 6, 7, 8, 9, 10]
deck: [2, 3, 4, 5, 6, 7, 8, 9, 10]
iteration: 2
temp_deck: [2, 4, 5, 6, 7, 8, 9, 10]
deck: [2, 4, 5, 6, 7, 8, 9, 10]
iteration: 3
temp_deck: [2, 4, 6, 7, 8, 9, 10]
deck: [2, 4, 6, 7, 8, 9, 10]
iteration: 4
temp_deck: [2, 4, 6, 8, 9, 10]
deck: [2, 4, 6, 8, 9, 10]
iteration: 5
temp_deck: [2, 4, 6, 8, 10]
deck: [2, 4, 6, 8, 10]
Und dann bekomme ich den Index aus Bereichsfehler. Kannst du den Fehler in meiner Logik trotzdem erklären? Danke für die Hilfe.
Wie erwarten Sie, dass wir Ihnen helfen, wenn Sie den Code nicht anzeigen, von dem der Fehler stammt? – Julien
Warum nicht einfach random.shuffle() verwenden, dafür ist es gedacht. –