Fehler: list index out oft range

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
dannyboy385
User
Beiträge: 39
Registriert: Freitag 27. November 2015, 21:24

Hallo community. Ich habe ein toturial gefunden das die fibunaccifolge als berechnungsbeispiel nutzt. Dar ich mich seit 2 tagen in Python einarbeiten dachte ich mir warum nicht etwas damit basteln. Nun ist mir die Idee gekommen ein Programm zu schreiben welches die Wahl zwischen einer Reihe von 1-x od3r einer bestimmten Zahl bietet. Nun bekomme ich einen Haufen fehlermeldungen. Der Sinn des Programms ist sicher nicht zu finden und es ist sicher auch weder elegant programmiert noch fehlerfrei.
Ich wäre über jegliche Hilfe dankbar.

Code: Alles auswählen

def main():
    global a,x,b,y
    while a<=x :
        print (a)
        a , b=b , a+b
    else:
        re()

def re():
    global z
    z = input ("nochmal? 1 ja   2 nein ")
    if z == 1:
        start()
    elif z == 2:
        exit()
def start():
    global a,b,x,y,z
    a, b=0,1
    x = input ("bis zu welcher zahl:  ")
    y=x-1
    z=1
    main()

def bis():
    start()

def stelle():
    global a,x,b,y,s,p
    a,b=0,1
    q=0
    g= input ("welche stelle darf es sein")
    p=g+10
    while g == p:
        p = 10+len (s)
        s.append (a)
        a , b=b , a+b
    else:
        print s [g]
        re()
    
def menu():
    h= input (" 1  reihe bis \n 2  stelle")
    if h==1:
        bis()
    elif h==2:
        global s
        stelle()
        
        
a,b,x,y,z = 0,0,0,0,0
s=[]
menu()
Zuletzt geändert von Anonymous am Freitag 27. November 2015, 23:43, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Chemical Bro
User
Beiträge: 14
Registriert: Freitag 20. November 2015, 11:02

Huch, das ist aber sehr unübersichtlich!
Du musst an der Form deines Programms arbeiten.

Hast du schon mal was von Einrücken oder Kommentieren gehört?
Wenn nein, dann guck dir das mal bei www.python.org an.

Allgemein, wenn du Funktionen definierst, kann man nur returnen und dann im Hauptprogramm
einer Variable den returnenden Wert zuweisen; bei print kommt nichts sinnvolles heraus.
BlackJack

@dannyboy385: Wenn Du weist dass das unelegant, nicht fehlerfrei, und vor allem sinnlos ist, was soll das dann? Der Quelltext ist jedenfalls komplett für die Tonne. Da ist nichts was man irgendwie retten könnte ohne es komplett neu und anders schreiben zu müssen, also lohnt eine irgendwie geartete Reparatur auch nicht. Und da sind auch absolut sinnfreie Stücke drin die irgendwie nach zufällig erzeugt aussehen. Wie das ``p=g+10`` gefolgt von einem ``while g == p:`` — WTF‽ Und die ``while``-Schleife hat dann auch noch einen ``else``-Zweig ohne ein ``break``. Würde das natürlich auch nicht besser machen weil der Schleifenkörper ja sowieso toter Code ist, aber wie kommt man auf so etwas‽ Freitag Abend‽ Don't drink and code… :twisted:

Programme schreibt man nicht komplett runter und testet sie dann, sondern man entwickelt sie Stück für Stück, Funktion für Funktion, und *testet* jede Funktion, ob sie das tut was sie soll, bevor man mit der nächsten Funktion weiter macht. So verhindert man das man am Ende eine Menge Probleme in viel Quelltext hat.

Funktionen die testbar sind verwenden weder ``global`` noch werden Funktionsaufrufe als eine Art unbedingter Sprung zu einem benannten Stück Code missbraucht. Funktionen werden so geschrieben das sie eine Aufgabe erledigen und nur die, und danach zum Aufrufer zurück kehren. Eventuell mit einem Ergebnis als Rückgabewert. Und alle Werte, ausser Konstanten die von aussen kommen, werden als Argumente übergeben, und nicht auf magische Weise aus der ”Umgebung” genommen.

Keine einzige der ”Funktionen” ist problemlos für sich genommen testbar!

Namen sind ebenfalls wichtig. Bei sinnvollerem Quelltext sollten Namen so gewählt werden das der Leser das Programm leichter versteht. Das helfen einbuchstabige Namen eher selten.
Antworten