Doppelabsicherung bei Eingabe

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.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

unterbrechen und zurückspringen passt nicht zusammen. In welchem Fall soll denn die Schleife unterbrochen werden?
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Ich möchte, dass Ups! Das war keine gültige Zahl. Versuche es noch einmal... erscheint, wenn ein Buchstabe (und auch andere Zeichen wie z.B. ?",%) oder eine Zahl kleiner gleich 0 oder größer MANNSCHAFTSANZAHL eingegeben wird. Dann soll der Nutzer eine erneute Eingabe vornehmen.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Ja, das wissen wir schon, aber in welchem Fall soll die Schleife unterbrochen werden, und in welchem Fall wird sie im Moment unterbrochen.
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Vermutlich verstehe ich etwas nicht.

Die Schleife soll unterbrochen werden, wenn eine gültige Zahl eingegeben wird. Diese muss zwischen 1 und einschließlich der MANNSCHAFTSANZAHL liegen.

In allen anderen Fällen soll die Schleife weiterlaufen. Es soll der Benutzer immer wieder die Fehlemeldung erhalten und dann eine neue Eingabe vornehmen dürfen/müssen.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Genau richtig. Aber welche Bedingung prüfst Du denn tatsächlich?
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Ich prüfe (i < 0 or i >= MANNSCHAFTSANZAHL)

Ich prüfe, ob i kleiner als 0 oder größer als MANNSCHAFTSANZAHL ist.

Ist das falsch? Wenn ja - warum?
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich weiß nicht, wie ich es noch anders formulieren soll. Ja es ist falsch, und warum, hast Du schon vor ein paar Beiträgen selbst geliefert.
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Wie bereits bekannt ist mein aktueller Stand so:

Code: Alles auswählen

while True:
    try:
        i = int(input("Gebe die Kennzahl für die Heimmannschaft ein:"))
        if (i < 0 or i >= MANNSCHAFTSANZAHL):
            break
    except ValueError:
        print("Ups! Das war keine gültige Zahl. Versuche es noch einmal...")
Vielleicht stehe ich gerade auf dem Schlauch. Ich habe diese Zeilen auch in ein eigenes File kopiert. Das besteht aus 8 Zeilen. Hier habe ich schon viele Änderungen vorgenommen und ausprobiert. Es kommt aber am Ende nie das raus, wie es sein soll.

Ich weiß wrklich nicht, was falsch ist. Könntest du mir bitte die Zeilen programmiern? Das wäre sehr nett.

Es gibt die Zeile mit dem ValueError. Muss man wissen, welche Fehlermeldung geworden wird, um diese abzufangen? Vermutlich ja - ich habe mal nur Error eingegeben. Das hat nicht funktioniert.
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Habe gerade bei meinem Kurzprogramm die Vorzeichen geändert, weil ich vermute, dass es an ihnen liegt. Das Programm läuft durch. Aber egal, welche Zahl (zwischen 0 und 5 bzw. außerhalb dieses Bereichs) ich eingebe, kommt nicht die Zeile, dass man die Eingabe noch mal versuchen soll.
Die Meldung Ups! Das war keine gültige Zahl. Versuche es noch einmal... kommt nur, wenn ich einen Buchstaben eingebe.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Der except-Teil wird nur durchlaufen, wenn auch eine Exception auftritt. Ein if löst das nicht aus. Wenn Du eine Text-Ausgabe in jedem Schleifendurchgang willst, dann pack das print einfach hinter den excet-Bloc:

Code: Alles auswählen

while True:
    try:
        i = int(input("Gebe die Kennzahl für die Heimmannschaft ein:"))
    except ValueError:
        pass
    else:
        if 0 <= i < MANNSCHAFTSANZAHL:
            break
    print("Ups! Das war keine gültige Zahl. Versuche es noch einmal...")
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Vielen, vielen Dank für die Lösung. Habe sie gerade ausprobiert. Da wäre ich nie drauf gekommen.
Werde noch nachschauen wass pass bedeutet. Habe es in meinen Büchern schon gesehen.
Logge mich jetzt aus.
Nochmal vielen Dank
Bill
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Ich kann die verschiedenen Varianten jetzt nachvollziehen.
Vielen Dank nochmals.
Antworten