Eingabe auf int prüfen

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.
Antworten
crazyyzarc
User
Beiträge: 28
Registriert: Freitag 10. Juli 2015, 21:08
Wohnort: PyLand

Ich wollte dass wenn man 3 beliebige Zahlen eingibt sie dann ausgegeben werden und zusatzinformationen zu dieser Zahl geben wird.
Aber das Problem besteht darin dass es auch Benutzer gibt die unfähig sind anstatt eine reine Zahl eingeben zu sollen ein character or string und deshalb habe ich das in der If bedingung versucht aber irgendwie will das NOT oder OR nicht dahin

Code: Alles auswählen

#INPUT
print("Gebe Zahl (1/3) ein: ")
x = input()
print("Gebe Zahl (2/3) ein: ")
y = input()
print("Gebe Zahl (3/3) ein: ")
z = input()

#CONVERT
x = int(x)
y = int(y)
z = int(z)

#OUTPUT
if x != int():
    print("Keine Zahl")
    print(type(x))
elif y != int():
    print("Keine Zahl")
    print(type(y))
elif z != int():
    print("Keine Zahl")
    print(type(z))
else:
    for i in x, y, z:
        print("Zahl:", i)
        print("Quadriert:", i*i, "\n")
BlackJack

@crazyyzarc: Wenn der Benutzer etwas anderes eingibt als eine Zeichenkette die sich in eine ganze Zahl umwandeln lässt, dann kommt Dein Code doch gar nicht erst bis zu den (falschen) ``if``-Abfragen. Da passiert vorher etwas. *Darauf* musst Du entsprechend mit Ausnahmebehandlung reagieren.

Statt den Code für alle drei Eingaben zu wiederholen würde sich hier auch eine Funktion anbieten die dreimal aufgerufen wird.
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

@crazyyzarc: prüfe doch gleich bei der Eingabe, ob die Eingabe zulässig ist, am Besten mit Try Except. Beispiel

Code: Alles auswählen

eingabe = ''
while type(eingabe) != type(0):
    try:
        eingabe = int(input('Eingabe Ganzzahl: '))
    except:
        pass

print('der Wert ist = ',eingabe)
Das kann man natürlich noch ausbauen.
BlackJack

@hans: Typtests mit `type()` sind keine gute Idee. ``type(0)`` ist zudem etwas umständlich, man kennt den Typ von 0 doch, den muss man nicht jedes mal neu ermitteln. Das `eingabe` mal an eine Zeichenkette und mal an eine ganze Zahl gebunden wird ist verwirrend. Ein nacktes ``except:`` das dann auch noch *nichts* zur Folge hat, also *jede* Ausnahme einfach ignoriert ist grob fahrlässig. Man würde hier eher eine ”Endlosschleife” schreiben die mit ``break`` verlassen wird sobald man ein Ergebnis hat, und nur die Ausnahme behandeln die man auch tatsächlich erwartet bei der Zeile.
bb1898
User
Beiträge: 200
Registriert: Mittwoch 12. Juli 2006, 14:28

hans hat geschrieben:@crazyyzarc: prüfe doch gleich bei der Eingabe, ob die Eingabe zulässig ist, am Besten mit Try Except. Beispiel

Code: Alles auswählen

eingabe = ''
while type(eingabe) != type(0):
    try:
        eingabe = int(input('Eingabe Ganzzahl: '))
    except:
        pass

print('der Wert ist = ',eingabe)
Das kann man natürlich noch ausbauen.
So ist das aber doppelt gemoppelt, die Typprüfung ist unnötig. Es reicht so:

Code: Alles auswählen

while True:
	try:
		eingabe = int(input("Eingabe Ganzzahl: "))
	except ValueError:             # except allein ist nie gut
		print("Das war keine Ganzzahl!")
	else:
		break
print("Der Wert ist = ", eingabe)
Ich sehe schon, BlackJack war schneller. Ich schick's mal trotzdem ab.
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Jo, der Code von bb1898 gefällt mir noch besser . Und except ohne irgend etwas, scheint in der Windowswelt nicht unüblich zu sein, Stichwort "Ein unbekannter Fehler ist aufgetreten"

Frage zu den Exceptions: Gibt es irgendwo eine Übersicht wer Welche Exception auslöst? Die Language Reference ist da etwas umständlich. Oder bleibt nur in idle ausprobieren?
BlackJack

@hans: Das hat nichts mit Windows zu tun und diese Fehlermeldungen kommen wenn tatsächlich nicht ermittelt werden kann was passiert ist, was bei Python eher nicht vorkommen dürfte. Zudem sind das Fehlermeldungen die dem Benutzer präsentiert werden und wo das Programm abgebrochen wird. *Innerhalb* eines Programms beliebige Fehler einfach zu ignorieren, es dem Benutzer nicht zu sagen, und so weiter zu machen als sei nichts geschehen ist etwas völlig anderes.

So eine Fehlermeldung habe ich unter Windows übrigens schon ziemlich lange nicht mehr gesehen.
Antworten