Hi leute,
habe ein kleines problem mit meinem python-skript.
in meiner letzten schleife, in der eine "ungültige" eingabe abgefangen wird schreibt mir die shell immer die meldung
Traceback (most recent call last):
File "H:\Hausaufgabe 29.1.2008 test2.py", line 297, in <module>
if int(ende) in Ziffern:
ValueError: invalid literal for int() with base 10: 'beenden'
Ich lade noch meinen quelltext rein, aber es kommt eigtl nur auf die letzte while-schleife an, weil in der er fehler verursacht wird.
bitte um schnelle hilfe
mfg, lukas
Code ausgelagert: http://paste.pocoo.org/show/27485/
P.S: bin noch an den anfängen meiner lehrzeit mit python
EDIT by Gerold: Code ausgelagert
ValueError: invalid literal for int() with base 10: 'beenden
-
- User
- Beiträge: 83
- Registriert: Dienstag 15. Januar 2008, 15:39
- Kontaktdaten:
-
- User
- Beiträge: 83
- Registriert: Dienstag 15. Januar 2008, 15:39
- Kontaktdaten:
mir ist außerdem gerade aufgefallen, dass er die eingegebene ziffer aus der letzten schleife nicht als "auswahl" verwendet, bzw falls doch, dass es nichts bewirkt... er springt einfach nur zum anfang des menüs...
vllt hat jemand auch hierfür eine lösung
mfg, lukas
vllt hat jemand auch hierfür eine lösung
mfg, lukas
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Naja, schau doch mal:
Wenn du fuer end was anderes als eine Zahl eingibst, was soll dann herauskommen, wenn du das in der if-Abfrage in einen Integer umzuwandeln versuchst? Nichts anderes sagt die Fehlermeldung.
Mach's doch so:
Noch ein paar Anmerkungen: Du hast in deinem Quellcode ziemlich viele Stellen, die annaehern gleich sind, die ganze Ausgabe des Menues z.B. Das kann man zu Funktionen zusammenfassen.
Verzichte besser auf Umlauge in Variablennamen, das kann ganz schoenen Aerger geben.
Benutze keine except ohne eine konkrete Ausnahme anzugeben. Sonst siehst du auch keine Fehlermeldungen, wenn du irgendwo einen Programmierfehler machst...
Code: Alles auswählen
ende=raw_input(...)
if int(ende) in Ziffern:
...
elif ende=='beenden':
...
Mach's doch so:
Code: Alles auswählen
while Auswahl not in Ziffern:
try:
ende=raw_input('Tippen Sie nun die Ziffer oder "beenden" ein: ')
Auswahl=int(ende)
beenden=0
Menue=0
except ValueError:
Menue=2
beenden=1
print 'Vielen Dank für die Verwendung!'
break
Noch ein paar Anmerkungen: Du hast in deinem Quellcode ziemlich viele Stellen, die annaehern gleich sind, die ganze Ausgabe des Menues z.B. Das kann man zu Funktionen zusammenfassen.
Verzichte besser auf Umlauge in Variablennamen, das kann ganz schoenen Aerger geben.
Benutze keine except ohne eine konkrete Ausnahme anzugeben. Sonst siehst du auch keine Fehlermeldungen, wenn du irgendwo einen Programmierfehler machst...
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
-
- User
- Beiträge: 83
- Registriert: Dienstag 15. Januar 2008, 15:39
- Kontaktdaten:
danke rebecca,
habe jetzt allerdings immernoch das problem, dass ich über den try-teil die abgefangene eingabe trotzdem nicht so verarbeiten kann, dass direkt der menüpunkt der zugehörigen ziffer ausgewählt wird. selbst, wenn ich die punkte "beenden=0" und "menue=0" entferne, springt er bei zifferneingabe in das menü...wobei ich mich farge wieso das...ob er da einfach die anfngsschleife neu startet...(?) ich möchte das programm so verändern, dass ich bei der zifferneingabe unten durch den try direkt in den zugehörigen menüpunkt komme...so wie es jetzt ist, funktioniert es leider nicht.
mit den definitionen habe ich mir auch schon gedanken gemacht, da ich auch der auffassung war, dass es so zulange ist
werde mich darum aber erst kümmern, wenn ich dieses problem gelöst habe, da ich gerne zunächst eine funktionierende variante hätte
mfg, lukas
habe jetzt allerdings immernoch das problem, dass ich über den try-teil die abgefangene eingabe trotzdem nicht so verarbeiten kann, dass direkt der menüpunkt der zugehörigen ziffer ausgewählt wird. selbst, wenn ich die punkte "beenden=0" und "menue=0" entferne, springt er bei zifferneingabe in das menü...wobei ich mich farge wieso das...ob er da einfach die anfngsschleife neu startet...(?) ich möchte das programm so verändern, dass ich bei der zifferneingabe unten durch den try direkt in den zugehörigen menüpunkt komme...so wie es jetzt ist, funktioniert es leider nicht.
mit den definitionen habe ich mir auch schon gedanken gemacht, da ich auch der auffassung war, dass es so zulange ist
werde mich darum aber erst kümmern, wenn ich dieses problem gelöst habe, da ich gerne zunächst eine funktionierende variante hätte
mfg, lukas
-
- User
- Beiträge: 83
- Registriert: Dienstag 15. Januar 2008, 15:39
- Kontaktdaten:
hallo
kann mir bitte mal jemand antworten?^^
ich komm immernoch nicht weiter...
kann mir bitte mal jemand antworten?^^
ich komm immernoch nicht weiter...
Also mir ist das zu gross, zu verschachtelt und zu viel globaler Zustand um mich damit auseinander zu setzen. Sorry.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Evil4President!
Das liegt wahrscheinlich daran, dass du deinen Code zu wenig strukturiert hast. Du könntest viel in Funktionen auslagern um das Programm durchsichtiger zu machen.
Aber so wie es im Moment ist, erinnert mich dein Programm eher an alte BASIC-Programme in denen jemand zwanghaft GOTO und GOSUB vermieden hat. Sorry, aber ich mache mir nicht die Mühe, dein Programm zu entwirren.
mfg
Gerold
PS: beim Auslagern deines Codes ist mir aufgefallen, dass du Umlaute in Variablenamen verwendest -- bitte tu das nicht.
Weiters benutzt du Umlaute in den Texten, ohne ein Encoding-Cookie angegeben zu haben. Bitte lies dir diesen Beitrag durch, dann weißt du von was ich schreibe: http://www.python-forum.de/topic-5095.html
Noch etwas. Du fängst teilweise ALLE Fehler eines Abschnittes ab, anstatt nur spezielle Fehler abzufangen. So kann es sein, dass du unerwartete Fehler nicht entdeckst.
So:
Nicht so:
.
Das liegt wahrscheinlich daran, dass du deinen Code zu wenig strukturiert hast. Du könntest viel in Funktionen auslagern um das Programm durchsichtiger zu machen.
Aber so wie es im Moment ist, erinnert mich dein Programm eher an alte BASIC-Programme in denen jemand zwanghaft GOTO und GOSUB vermieden hat. Sorry, aber ich mache mir nicht die Mühe, dein Programm zu entwirren.
mfg
Gerold
PS: beim Auslagern deines Codes ist mir aufgefallen, dass du Umlaute in Variablenamen verwendest -- bitte tu das nicht.
Weiters benutzt du Umlaute in den Texten, ohne ein Encoding-Cookie angegeben zu haben. Bitte lies dir diesen Beitrag durch, dann weißt du von was ich schreibe: http://www.python-forum.de/topic-5095.html
Noch etwas. Du fängst teilweise ALLE Fehler eines Abschnittes ab, anstatt nur spezielle Fehler abzufangen. So kann es sein, dass du unerwartete Fehler nicht entdeckst.
So:
Code: Alles auswählen
try:
...
except ValueError:
...
Code: Alles auswählen
try:
...
except:
...
Zuletzt geändert von gerold am Mittwoch 13. Februar 2008, 16:48, insgesamt 2-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- User
- Beiträge: 83
- Registriert: Dienstag 15. Januar 2008, 15:39
- Kontaktdaten:
schade, aber im prinzip müsstest du dir nur die allerletzte schleife un den anfang ansehen, mittendrin die ganzen schleifen sind für das problem vollkommen unwichtig...da spielt nur die variable "auswahl" eine rolle, und um das problem gehts ja...nur du musst dir nicht die ganzen schleifen anschaun, weil die schleifen funktionieren, er springt nur aus der unterschen schleife bei eingabe der ziffer für eine andere schleife nichgt in die richtige schleife, sondern beginnt das prog. einfach nur von vorne...
für den verschachtelten und großen text muss ich mich entschuldigen, muss das noch zwecks schleifen-definition überarbeiten.
mfg
für den verschachtelten und großen text muss ich mich entschuldigen, muss das noch zwecks schleifen-definition überarbeiten.
mfg
-
- User
- Beiträge: 83
- Registriert: Dienstag 15. Januar 2008, 15:39
- Kontaktdaten:
danke gerold...
werde das mit umlauten korrigieren und versuchen die schleifen in definitionen zu binden, damit es nichtmehr so viel ist und ihr es euch anschauen könnt.
werde das mit umlauten korrigieren und versuchen die schleifen in definitionen zu binden, damit es nichtmehr so viel ist und ihr es euch anschauen könnt.
Werd jetzt mal wieder mein Senf dazu geben. Du kommst nicht in die Schleifen rein, weil Auswahl kein Integer ist. Somit muss dann dein Code folgendermaßen aussehen (mal sehen ob ich das mit den Python-Tags hin bekomme)
Alternativ kannst du die Abfragen Auswahl==... mit Strings machen. Musst dann natürlich Ziffern (Liste) ändern.
Was mir noch aufgefallen ist, ist dass du möglich (also die Liste) ständig gleich definierst. Das kannst du aus den ganzen Schleifen raus ziehen. Und dann kann ich meinen Vorrednern nur beipflichten, schreib das ganze in Funktionen. Bei den if-Bedingungen mit stop kannste bei der letzten Bedingung else benutzen (ist halt kürzer ). Ach so und die ganzen prints sind einfach nur scheußlich. Und die Funktionen Primfaktorzerlegung, Primzahltest klein schreiben .
Hab jetzt glaub ich genug rumgekrittelt.
Code: Alles auswählen
...
try:
Auswahl=int(raw_input("bla"))
except ValueError:
Auswahl=0
...
Was mir noch aufgefallen ist, ist dass du möglich (also die Liste) ständig gleich definierst. Das kannst du aus den ganzen Schleifen raus ziehen. Und dann kann ich meinen Vorrednern nur beipflichten, schreib das ganze in Funktionen. Bei den if-Bedingungen mit stop kannste bei der letzten Bedingung else benutzen (ist halt kürzer ). Ach so und die ganzen prints sind einfach nur scheußlich. Und die Funktionen Primfaktorzerlegung, Primzahltest klein schreiben .
Hab jetzt glaub ich genug rumgekrittelt.
-
- User
- Beiträge: 83
- Registriert: Dienstag 15. Januar 2008, 15:39
- Kontaktdaten:
ich werds mal versuchen.
hoffe, dass es jetzt klappt, habe das mit den prints bereits reduziert, hat mich selbst auch genervt...
werde aber evtl noch ein kleines bisschen brauchen mit dem einbinden der schleifen in die definitionen...bin noch nicht so ganz fit mit dem verwenden der definitionen, weil ich das erst vor 2 wochen angefangen habe...
mfg
hoffe, dass es jetzt klappt, habe das mit den prints bereits reduziert, hat mich selbst auch genervt...
werde aber evtl noch ein kleines bisschen brauchen mit dem einbinden der schleifen in die definitionen...bin noch nicht so ganz fit mit dem verwenden der definitionen, weil ich das erst vor 2 wochen angefangen habe...
mfg