def stopfrage(): antwort = raw_input('Wirklich aufhoeren? ') if antwort == 'j': print 'Wir hoeren auf' elif antwort == 'n': print 'Wir machen weiter' else: print 'Ungueltige Eingabe' stopfrage()
TypeError: 'str' object is not callable (Python)
![]() Anmeldungsdatum: Beiträge: 2133 Wohnort: Gelsenkirchen |
|
Anmeldungsdatum: Beiträge: 2105 |
Nach die while Schleife kommt einfach der Code, der ausgeführt werden soll, wenn die Eingabe richtig war. 😉 Solange nicht "j" oder "n" eingegeben wurde, bleibt das Programm in der Schleife. eingabe = raw_input("j/n") while (eingabe != "j" and eingabe != "n"): eingabe = raw_input("Falsche Eingabe: ") ## Hier gehts mit dem Code weiter
@snafu1: Gruß Martin |
(Themenstarter)
Anmeldungsdatum: Beiträge: 952 |
Hab ich ja so gemacht: def entwerten(loesung,eingabe): if eingabe == loesung: return True if eingabe == 's': stop = raw_input("Wirklich aufhoeren? [j/n] ") print 55*'-' while (stop != "j" and stop != "n"): raw_input ("))) Falsche Eingabe (((") return stop == 'n' Aber wenn ich dann etwas falsche, z.b. f, eingebe, dann kommt ja immer wenn ich enter drücke 'Falsche Eingabe'. Antwort: s Wirklich aufhoeren? [j/n] f ------------------------------------------------------- ))) Falsche Eingabe ((( ))) Falsche Eingabe ((( ))) Falsche Eingabe ((( ... Gruss |
Anmeldungsdatum: Beiträge: 2105 |
N3X0NIC hat geschrieben:
Du wertest die erneute Eingabe ja auch nicht aus! Lies also die neue Eingabe des Benutzers ein: while (stop != "j" and stop != "n"): stop = raw_input("Falsche Eingabe! [j/n]: ") |
![]() Anmeldungsdatum: Beiträge: 2133 Wohnort: Gelsenkirchen |
Wenn du mit Return abbrechen willst, musst du das auch in den Code schreiben. Hier mal mit Returnwerten: def stopfrage(): antwort = raw_input('Wirklich aufhoeren? ') if antwort == 'j': print 'Wir hoeren auf' return True elif antwort == 'n': print 'Wir machen weiter' return False elif antwort == '': print 'Abbruch, weil nichts geschrieben' return None else: print 'Ungueltige Eingabe' return stopfrage() |
(Themenstarter)
Anmeldungsdatum: Beiträge: 952 |
@ Mr. Kanister Gruss |
Anmeldungsdatum: Beiträge: 2105 |
snafu1 hat geschrieben:
Und nochmal. Nein! Keine Rekursion! Stell dir vor der Benutzer gibt 100x das Falsche ein. Dann wird die Funktion 100 mal aufgemacht, was einfach nur unnötig ist. 😉 |
![]() Anmeldungsdatum: Beiträge: 2133 Wohnort: Gelsenkirchen |
Mr. Kanister hat geschrieben:
Wenn ich die vier verschiedenen Möglichkeiten jeweils gesondert behandeln will, muss ich das IMHO so schreiben. |
![]() Anmeldungsdatum: Beiträge: 2133 Wohnort: Gelsenkirchen |
Mr. Kanister hat geschrieben:
Der Sinn von Funktionen ist es aber doch gerade, mehrfach verwendbar zu sein. Und genau dieser Fall besteht in meinem Beispiel. Oder sprichst du von 100 gleichzeitig offenen Funktionen? Also ich gehe davon aus, dass durch return immer die vorherige geschlossen wird, oder nicht? |
Anmeldungsdatum: Beiträge: 2105 |
Mal von dem Argument "böse Rekursion" abgesehen... Warum sollte man den Benutzer solange fragen, bis etwas richtiges eingegeben wurde? def confirm(question="Möchten Sie fortfahren [J/n]? ", key="N"): return(key not in str(raw_input(question)).upper())
Nimm apt-get als Beispiel: wenn es eine Ja/Nein Frage gibt und mann etwas außer J/N/"" eingibt, dann wird das als Abbruch interpretiert. Und das Verhalten finde ich auch gut. @N3X0NIC: |
(Themenstarter)
Anmeldungsdatum: Beiträge: 952 |
Funktioniert aber alles wie es soll 😉 Gruss |
![]() Anmeldungsdatum: Beiträge: 479 |
snafu1 hat geschrieben:
nein, wird sie ja nicht. das frisst unnötig speicher |
![]() Anmeldungsdatum: Beiträge: 2133 Wohnort: Gelsenkirchen |
@Kanister: BadBoy hat geschrieben:
Ah okay. Das war mir nicht bewusst. |