Hallo Tengel,
Programmieren ist keine Ratespielm eher wie Kuchenbacken. Wenn man die Zutaten richtig vermengt kann man den Teig in den Ofen schieben (das Programm ausführen) und zum Schluss kommt ein leckerer Kuchen raus. Wenn man sich an ein Grundrezept hält, kommt erst mal etwas Essbares raus, danach kann man immer noch verfeinern (oh, mehr Kakao).
Deine Versuche sehen mehr danach aus, als ob Du mal zufällig die Eier aufgeschlagen hast, statt sie einfach in der Schale ins Mehl zu legen und schon sieht eine Ecke aus wie Kuchen, der Rest ist aber noch ungenießbar.
Die wirst keinen noch so langjährigen Programmierer finden, der ein Programm, ab einer bestimmten Komplexität, einfach so herunterschreibt und es funktioniert. Deshalb testen wir kleine Komponenten, ob sie auch das Tun, was wir von ihnen Wollen und setzten diese kleinen Teile zu etwas Größerem zusammen.
Dazu muß man aber den kleinen Teilen eine konkrete Aufgabe gegeben.
Es hilft, sich erstmal einen Plan zu machen:
1. ich will ein Programm, das den Traffic zählt.
2. es soll können:
- Verbrauch eingeben
- Gesamtverbrauch berechnen
- Gesamtverbrauch in Datei schreiben/lesen
- ein schönes Menü haben
Exemplarisch mache ich das mal am ersten Punkt:
Eingeben geht mit Input:
Code: Alles auswählen
verbrauch = input("Wieviel wurde verbraucht:")
print verbrauch
oh sehr gut, funktioniert. Ach nein, ich brauche ja eine Zahl:
Code: Alles auswählen
verbrauch = int(input("Wieviel wurde verbraucht:"))
print verbrauch
funktioniert. Außer ich gebe gar keine Zahl ein ;-(
Also Fehler abfangen:
Code: Alles auswählen
try:
verbrauch = int(input("Wieviel wurde verbraucht:"))
except ValueError:
print("Bitte Zahl eingeben!")
print verbrauch
Jetzt kommt bei Falscheingabe ein Fehler, dass er verbrauch nicht kennt.
Aber da ich nur diese paar Zeilen und nicht das ganze Programm am Stück anschaue weiß ich auch, dass der Fehler irgendwo hier drin stecken muß. Wäre das Programm komplexer und ich würde schon vorher irgendwo »verbrauch« definieren, würde ich mich wundern, warum er jetzt einen „falschen“ Wert benutzt, könnte aber nicht mehr herausfinden woher der kommt.
Also was soll dann passieren? Er soll nochmal nachfragen:
Code: Alles auswählen
while True:
try:
verbrauch = int(input("Wieviel wurde verbraucht:"))
break
except ValueError:
print("Bitte Zahl eingeben!")
print verbrauch
Ja jetzt kann er auch mit falschen Eingaben umgehen. Packen wir das ganze doch in eine Funktion:
Code: Alles auswählen
def input_verbrauch():
while True:
try:
return int(input("Wieviel wurde verbraucht:"))
except ValueError:
print("Bitte Zahl eingeben!")
verbauch = input_verbrauch()
print verbrauch
Diese Funktion ist jetzt getestet, und tut genau das was ich will. Ich kann sie nun benutzen und muß mich um Details, wie die Eingabe wiederholt oder in eine Zahl umgewandelt wird, nicht mehr kümmern.
Das kann ich jetzt mit allen anderen Punkten auf meiner Liste genauso machen.
Auch wenn es hart ist, würde ich Dir empfehlen, nochmal von vorne anzufangen und alles aus
getesteten Komponenten aufzubauen, denn dein Programm tut vielleicht, aber es macht nicht das, was Du beabsichtigt hast, dass es tut.