2016-06-01 7 views
0

Ich war an einem Programm arbeiten, das zufällig nehmen Wörter aus einer Liste und kombinieren sie in einem Satz aber ich halte einen Fehler bekommen:Listenindex in einem zufälligen Erzeugungsprogramm außerhalb des Bereichs

File "test2.py", line 13, in generater 
    print list[z+2] , 
IndexError: list index out of range 

Dies ist mein Code:

def generater(): 
    list = ["naji", "gaming", "gameplay", "start", "stuped", "awesome", "fast", "new", "racing", "shoting", "cool", "super"] 
    from random import randint 
    x = randint(0,11) 
    print list[x] , 
    y = randint(0,11) 
    if y == x and y != 0 : 
     print list[y-1] , 
    else : 
     print list[y] , 
    z = randint(0,11) 
    if z == x or z == y and z < 8 : 
     print list[z+2] , 
    elif z == x or z == y and z > 9 : 
     print list[z-5] 
    else : 
     print list[z] 
generater() 
+3

** Obligatorische Warnung ** - Bitte benutzen Sie 'list' nicht als Variablennamen, da sie die eingebauten Funktionen überschattet –

+0

Was soll Ihre Ausgabe sein? –

+0

Obligatorische Warnung ok danke – naji

Antwort

2

Ihre Liste 12 Elemente enthält, so dass die gültigen Indexbereich von 0 bis 11.

ist

Ihr rand Generator liefert einen Wert zwischen 0 und 10.

10 + 2 ist mehr als 11 - Sie versuchen also auf einen Listenindex zuzugreifen, der sich am Ende der Liste befindet.

+0

oh so x = randint (0,11) ist von 0 bis 10? – naji

+0

jetzt habe ich es danke mann – naji

+0

aber ich habe wenn z <8 – naji

2

Das Problem ist in Ihrer Erklärung

if z == x or z == y and z < 8: 

Versuche Klammern (z == x oder z == y) setzen. Für den Fall, dass z == x, Ihr Programm stellt nicht sicher, dass z < 8. Sie dies durch

Eingabe testen
if 1 or 1 and 0: 
    print('TRUE!') 

und die Ausgabe an

if (1 or 1) and 0: 
    print('TRUE!') 

Kurz vergleichen, sind Sie sagt "a oder (b und c)", aber Sie möchten "(a oder b) und c" ausdrücken.

Ich bin nicht wirklich sicher, dass ich den Zweck Ihres Programms verstehe, aber solange Sie garantieren, dass Ihr z-Wert kleiner als 8 ist, sollten Sie keine Ausnahme außerhalb der Grenzen erhalten.

+0

ich verstehe jetzt vielen dank für ihre zeit mann das war wirklich hilfreich – naji

Verwandte Themen