2016-05-16 9 views
0

Ich habe den folgenden Code und ich das Programm schriftlich nennen:Indexerror: Listenindex in Python außerhalb des Bereichs, kennt die Bedeutung, aber nicht verstehen, warum dies geschieht

python new.py -s 13 -p 5 

Aber dann, in Zeile 63 Ich erhalte den folgenden Fehler. Ich weiß, was es bedeutet, aber ich kann nicht verstehen warum.

Traceback (most recent call last): 
File "new.py", line 63, in <module> 
rythm[i].append(rythm[last]) 
IndexError: list index out of range 

Und da ist der Code. Was ich versuche zu tun ist, verteilt 0 gleich unter 1s. Die erste Eingabe ist die Länge der Zeichenfolge mit den 0s und 1s und die zweite Eingabe ist die Nummer von 1s. Vielen Dank!

import argparse 


p = argparse.ArgumentParser() 
p.add_argument("-pulses", help = "number of pulses", type = int) 
p.add_argument("-slots", help = "length of the rythm", type = int) 
args = p.parse_args() 
slots = args.slots 
pulses = args.pulses 


pauses = slots - pulses 

mod = pauses % pulses 

rythm = [] 


if mod == 0: 
    x = slots/pauses 
    l = 0 
    while l<slots: 

     if l%x == 0: 
      rythm.append(1) 
     else: 
      rythm.append(0) 

     l = l + 1 

    print (rythm) 

if mod != 0: 
    i = 0 
    j = 0 

    while i < pulses: 
     rythm.append([1]) 
     i = i + 1 

    while j < pauses: 
     rythm.append([0]) 
     j = j + 1 

    last = len(rythm) 
    last = last - 1 
    last_len = len(rythm[last]) 
    x = slots%pauses 
    y = pauses - x 

    flag = True 

    while flag == True: 
     flag = False 

     if (last_len != 1) or (rythm[last] != 0): 

      flag = True 
      i = 0 

      while i < x: 
       rythm[i].append(rythm[last]) 
       rythm.remove(rythm[last]) 

       i = i + 1 

      y = y - x 
      x = x%y 
      last = len(rythm) 
      last = last - 1 
      last_len = len(rythm[last]) 

    print (rythm) 
+0

One FYI: es ist buchstabiert Rhythmus. – jgritty

+0

Ja, ich dachte schon und du schreibst, aber es war auf der Titelseite meines Projekts und ich dachte, ich sollte es so benutzen, danke trotzdem! –

+0

'rythm.append ([1])' ... Sie fügen eine Liste in eine Liste ein? Sie haben 'rythm.append (1)' über diesem –

Antwort

0

IndexError: list index out of range - bedeutet, dass der Sie einen Wert von Position zugreifen, die existieren tut.

zum Beispiel:

a = range(10) #length of a is 9, list indices start at 0 
print(a[10]) #accessing value by a index that doesn't exist, raises a IndexError exception 
+0

Ja, ich verstehe und danke, aber in Zeilen 38-44 erstelle ich die folgende Liste: [[1], [1], [1], [1], [1], [0], [0], [0], [0], [0], [0], [0], [0]] und dann in Zeile 63 versuche ich etwas in rythm [0] einzufügen, wenn i = 0, was [1 ist ], und ich weiß nicht, warum ich nicht kann –

+0

ja, aber bist du sicher, dass es einen Wert bei Rythm [last] gibt? – Prakhar

+0

leme überprüfen Sie den Code – Prakhar

0

Sollte der Check hier:

if (last_len != 1) or (rythm[last] != 0): 

Be:

if (last_len != 1) or (rythm[last] != [0]): 

einige Debug hinzufügen, oder einfache print-Anweisungen. Wenn Sie dies versuchen:

rythm[i].append(rythm[last]) 

Es bei rythm[last] definitiv nichts, weil Sie

tat
rythm.remove(rythm[last]) 

Auf der letzten Iteration.

+0

danke ich habe das if teil überprüft, aber jetzt geht es überhaupt nicht mehr in den if abschnitt kann ich nicht verstehen warum das nichts ist, weil ich zuerst den einfüge Wert und dann entferne ich es. Danach ändere ich auch den letzten Wert. –

+0

Mit dem Ratschlag, den Sie mir alle gaben, hat es endlich geklappt !! Vielen vielen Dank! –