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.
Ist folgende Funktion sinnvoll (mit vordefiniertem Argument run=True), um zu erreichen, dass man bei fehlerhafter Eingabe (zb ein "a" statt einer Zahl) erneut die 2 geforderten Felder eingeben muss, oder geht das "schöner":
def calc_it(run=True):
while run == True:
try:
x = int(raw_input('Zahl 1:'))
y = int(raw_input('Zahl 2:'))
print 'Zahl 1:{}'.format(x), ' Zahl 2:{}'.format(y)
run = False
except ValueError:
print 'Bitte eine Zahl angeben!'
Vielen Dank!
LG
Daniel
Zuletzt geändert von mcdaniels am Dienstag 19. Juni 2012, 12:33, insgesamt 3-mal geändert.
def calc_it():
while True:
try:
x = int(raw_input('Zahl 1:'))
y = int(raw_input('Zahl 2:'))
return 'Zahl 1:{} Zahl 2:{}'.format(x, y)
except ValueError:
print 'Bitte eine Zahl angeben!'
Karo
Zuletzt geändert von karolus am Dienstag 19. Juni 2012, 12:34, insgesamt 1-mal geändert.
mcdaniels hat geschrieben:
Ist folgende Funktion sinnvoll (mit vordefiniertem Argument run=True), um zu erreichen, dass man bei fehlerhafter Eingabe (zb ein "a" statt einer Zahl) erneut die 2 geforderten Felder eingeben muss, oder geht das "schöner":
Ein ganz klares jein ^^ Die Idee an sich ist schon korrekt, nur die Umsetzung ist nicht ganz so geschickt. Ich fange einfach mal von oben nach unten an:
Immer, wenn du ``x == True`` oder ``x == False`` schreibst, machst du einen kleinen Denkfehler. x ist bereits ein Wahrheitswert und muss nicht gegen einen anderen getestet werden. Ersteres ersetzt du also einfach durch ``x`` und letzteres durch ``not x``.
Dann hat die Zahlenabfrage noch ein Problem. Im Prinzip arbeitet der Ansatz ja korrekt, allerdings muss die erste Zahl auch dann noch einmal eingegeben werden, wenn die zweite Zahl nicht gültig ist. Die Funktion sollte also nur für eine einzige Eingabe ausgelegt sein. Du kannst dann ja zwei davon hintereinander schalten.
Weiter ist deine Formatierung total unsinning. Mit EINEM format-Aufruf kannst du die ganze Zeile zusammenfassen. Hier sieht es so aus, als hättest du irgendwann mal was von format gelesen und setzt es nun blind ein. Schau doch mal in die Dokumentation, die Formatierung ist ein recht mächtiges Werkzeug.
Abschließen ist noch das ``run = False`` überflüssig. Dies solltest du einfach durch ein ``break`` odr besser gleich ``return`` ersetzen, dann wird die Schleife ebenfalls verlassen. Aus der while-Schleife kannst du nun ein einfaches ``while True:`` machen.
Edit: fast vergessen: Natürlich solltest du in der Funktion zur Abfrage nichts berechnen. Schreibe eine Funktion zur Abfrage, eine Funktion für die Berechnung (welcher du die Eingaben als Parameter übergibst) und eine Funktion, welche die Abfragen durchführt und im Anschluss die Berechnung aufruft. Generell kannst du dir merken, dass du Eingabe/Ausgabe und Verarbeitung immer sauber trennen solltest.
Danke EyDu,
format hab ich noch nicht solange intus (wobei es intus nicht korrekt beschreibt, sonst hätt ich das ja nicht so "salatmäßig" gelöst). Ich übe und übe, ob da draus dann mal ein Rad wird, weiß ich noch nicht. Wird halt einige Jahre? dauern, bis ich derartig unschönes Gemurkse selbstständig unterlasse... hoffe ich habe die dazu notwendige Ausdauer