Ich bin neu in der Programmierung und habe einen Teil eines Programms für dieses Projekt erstellt: http://www.reddit.com/r/beginnerprojects/comments/19ot36/ project_a_variation_of_21 / als ich auf einen Indexfehler stieß. Mit Stackoverflow-Antworten habe ich den Fehler ursprünglich korrigiert, indem ich gemacht habe

random.randrange(0,len(cards)+1)]

Anstatt von

random.randrange(0,53,1)]

Es gibt mir jedoch weiterhin diesen Fehler. Wenn Sie es 50 Mal ausführen, wird möglicherweise kein Fehler angezeigt, aber beim ersten oder fünften Mal wird möglicherweise auch ein Fehler angezeigt. Für die Rundungsfunktion möchte ich in der Lage sein, Karten aus einem einzelnen Stapel zu verteilen. Jedes Mal, wenn ich eine Karte ziehe, wird sie aus dem Stapel entfernt. Jeder Rat wäre sehr dankbar! - Thomas

Fehlermeldung:

Traceback (most recent call last):
  File "<string>", line 420, in run_nodebug
  File "<module2>", line 39, in <module>
  File "<module2>", line 30, in round
  File "<module2>", line 26, in draw

IndexError: Listenindex außerhalb des Bereichs

Code:

def round():
    cards = ["2", "2", "2", "2", "3", "3", "3", "3", "4", "4", "4", "4", "5",
    "5", "5", "5", "6", "6", "6", "6", "7", "7","7","7","8", "8", "8", "8", "9",
    "9", "9", "9", "10", "10", "10", "10", "Jack", "Jack", "Jack", "Jack",
    "Queen", "Queen", "Queen", "Queen", "King", "King", "King", "King", "Ace", "Ace",
    "Ace", "Ace"]
    def draw():
        return cards[random.randrange(0,len(cards)+1,1)]
    acards = []
    aroundscore = 0
    acards.append(draw())
    acards.append(draw())
    print(acards)
    print(acards)
    cardsvalues = {"2":2, "3":3, "4":4, "5":5, "6":6, "7":7, "8":8, "9":9,
    "10":10, "Jack":10, "Queen":10, "King":10, "Ace":1}
    for i in acards:
        print(cardsvalues[i])
0
Thomas 21 Nov. 2013 im 01:06

4 Antworten

Beste Antwort

Der Grund, warum Sie len(cards) verwenden, ist, dass sich die Anzahl der Karten ändern kann, wenn Sie eine Karte austeilen! Ihre Zeile sollte len(cards) und nicht len(cards) + 1 sein, denn wenn Sie eine zur maximalen Länge von cards hinzufügen, kann sie zufällig eine Zahl auswählen, die größer ist als die Anzahl der Karten, die Sie haben. wodurch ein IndexError verursacht wird

1
Ryan Saxe 20 Nov. 2013 im 21:10

Ich stimme den obigen Vorschlägen zu. Aber noch etwas: Randrange garantiert nicht, dass die generierten Zahlen unterschiedlich sind. Sie können einige Zahlen mit demselben Wert erhalten. Es ist sehr schlecht für Kartenspiele - weil jede Karte in einem Spiel einzigartig sein muss. Ich würde vorschlagen, random.shuffle zu verwenden und von Anfang an nacheinander Karten aus der Liste zu nehmen.

0
VladimirM 20 Nov. 2013 im 21:16

Der Fehler tritt in Ihrer draw -Funktion auf, weil Ihr Bereich zu groß ist: random.randrange(0,len(cards)+1,1). Denken Sie beispielsweise daran, ob len(cards) 3 war. Dann würde rangerange mit 0, 4, 1 aufgerufen, was bedeutet, dass ganze Zahlen zwischen 0 und 3 zurückgegeben werden. Aber der Index {{X5 }} würde nicht existieren - es ist ein Fehler nach dem anderen.

Ich würde empfehlen, nur random.choice zu verwenden, um das zu erreichen, was Sie wollen. Es ist viel prägnanter und lesbarer.

def draw():
    return random.choice(cards)
1
voithos 20 Nov. 2013 im 21:12

Verwenden Sie random.randint (0,51). Ich denke, Sie sind mit der Länge der Karten verwechselt.

0
xZel 20 Nov. 2013 im 21:12