Seite 1 von 2

Kontrollabfrage, ob eine Zahl eingegeben wurde

Verfasst: Mittwoch 14. April 2010, 18:03
von Horst
Hallo,
Ich habe das Problem, dass ich gerne eine eingabe überprüfen möchte. Es soll gefragt werden, ob die Eingabe eine Zahl ist.
Kann mir jemand sagen, welchen Befehl ich eingeben muss???
Im Moment siehts bei mir so aus:

a = int (input ('Anzahl der Messreihen: '))
if a != int:
print ('Falsche Eingabe')
a = int (input ('Anzahl der Messreihen: '))

Ich hab einfach mal als Bedingung a!= int eingegeben. Dass das nicht gehen kann ist mir klar.
Danke schon mal

Re: Kontrollabfrage, ob eine Zahl eingegeben wurde

Verfasst: Mittwoch 14. April 2010, 18:08
von Darii
1. Benutze bitte code-Tags, Leerzeichen sind bei Python signifikant und die gehen sonst verloren.
2. Wenn du python < Version 3 verwendest bitte raw_input statt input verwenden. Warum steht in der Doku zu input.
3. Hast du deinen Code wenigstens mal durchlaufen lassen und geguckt was passiert, wenn du keine Zahl eingibst? Vermutlich nicht, sonst hätte deine Frage anders ausgesehen.

Verfasst: Mittwoch 14. April 2010, 18:42
von Horst
Danke für die schnelle Antwort!
Ich benutze Python 3.1
Ich hab das Programm durchlaufen lassen. Wenn ich etwas anderes als eine Zahl eingebe erhalte ich folgende Fehlermeldung:

Traceback (most recent call last):
File "C:\Users\Horst\Desktop\Programm_259.py", line 3, in <module>
a = int (input ('Anzahl der Messreihen: '))
ValueError: invalid literal for int() with base 10: 'e'

Du hast geschrieben, dass ich raw_input verwenden soll. das funktioniert aber auch nicht so recht.

Verfasst: Mittwoch 14. April 2010, 18:48
von jbs
raw_input bei Python 2.x

das sind codetags

Code: Alles auswählen

try: int(x)
except ValueError: print 'error'

Verfasst: Mittwoch 14. April 2010, 18:56
von xpilz
Ganz simpel:

Code: Alles auswählen

if type(x) == int:
	#x ist int
else:
	#x ist kein int
type(object)

Die Funktion type gibt den Datentyp der übergebenen Instanz object zurück.
wenn es das ist was du meintest.

Verfasst: Mittwoch 14. April 2010, 19:02
von EyDu
Hallo.

Da du 3.1 benutzt ist input schon der richtige Weg. Den Rest hat jbs ja schon verraten.

Aber die Fehlermeldung sagt doch eigentlich schon alles: "e" ist eben keine Zahl.
xpilz hat geschrieben:Ganz simpel:

Code: Alles auswählen

if type(x) == int:
	#x ist int
else:
	#x ist kein int
wenn es das ist was du meintest.
Und wie viel man doch falsch machen kann ;-) Wenn man schon der Meinung ist, dass man Typen testen will, was man eigentlich fast nie möchte, dann nicht mit "type" sondern mit "isinstance". Dann erkennt man auch Vererbung.

Sebastian

Verfasst: Mittwoch 14. April 2010, 19:04
von Horst
Das hat nun geklappt. Jetzt geht alles.
Besten Dank :D

Verfasst: Mittwoch 14. April 2010, 19:22
von xpilz
Ja, ich weiß nicht welche welche Art du nun benutzt, die von EyDu oder die von mir. Was EyDu sagt scheint mir nämlich ziemlich überzeugend type() nicht zu benutzen, obwohl ich davon in dem Bereich noch keine ahnung habe..

@EyDu: Das war jetzt die einzigste Methode typen zu prüfen, über die ich gelesen habe. So weit, viele Alternativen zu bilden, bin ich noch nicht. Wollte ich nur gesagt haben.

Verfasst: Mittwoch 14. April 2010, 19:23
von Darii
xpilz hat geschrieben:Ja, ich weiß nicht welche welche Art du nun benutzt, die von EyDu oder die von mir. Was EyDu sagt scheint mir ziemlich überzeugend type() nicht zu benutzen, obwohl ich davon noch keine ahnung habe..
Die werden beide nicht funktionieren, wenn er nicht wie in jbs Post angegeben die Ausnahme abfängt. Und wenn er das tut, ist die Abfrage des Typs sowieso überflüssig, da es dann nur int sein kann.

Verfasst: Mittwoch 14. April 2010, 20:46
von Horst
Ich habs jetzt so gemacht:

a = input ('Anzahl derWerte: ')
while type (a) == int:
print ('Falsche Eingabe')
a = input ('Anzahl der Messreihen: ')
continue

Verfasst: Mittwoch 14. April 2010, 21:05
von xpilz
Ich denke mal, da sind wir gleich auf. Ohne HIlfe hätte ich es nämlich auch so ähnlich gemacht wie du.
Um aber jbs,EyDu und Darii mit einzubeziehen würde ich sagen, das diese Version besser ist, aber aus welchem Grund müssten dir andere erklären :/.
jbs hat geschrieben:

Code: Alles auswählen

x = input('Anzahl der Werte: ')
try: int(x)
except ValueError: print 'Falsche Eingabe.' 
Das Beispiel von jbs nur ein wenig verändert. Ich hoffe das ist nicht so wichtig.

Verfasst: Mittwoch 14. April 2010, 21:16
von EyDu
@Horst: Dein Code kann nicht funktionieren. a ist immer ein String und damit ist die Bedinung des while immer false. Eine Typumwandlung findet nirgends statt.
xpilz hat geschrieben:Um aber jbs,EyDu und Darii mit einzubeziehen würde ich sagen, das diese Version besser ist, aber aus welchem Grund müssten dir andere erklären :/.
Erstmal, weil sie funktioniert ;-) Für eine genaue Erklärung suchst du mal nach dem EAFP- und dem LBYL-Prinzip. Ersteres wird in Python vorgezogen. Ganz grob ausgedrückt: Gehe erstmal davon aus, dass der normale/erwartete Programmfluss genommen wird, wenn nicht, dann reagiere. LBLY geht das Problem aus der anderen Richtung an.

Verfasst: Donnerstag 15. April 2010, 14:07
von Dav1d

Code: Alles auswählen

while True:
    a = input ('Anzahl der Messreihen: ')
    try:
        a = int(a)
   except ValueError:
       print('Falsche Eingabe')
   else:
       break

Verfasst: Donnerstag 15. April 2010, 17:41
von Mad-Marty
String eingeben und dann String Method .isdigit() benutzen


Werf ich einfach mal so rein, ist imo der "richtige" weg.

Verfasst: Donnerstag 15. April 2010, 18:04
von derdon
try-except ist in Python der beste und sicherste Weg.

Verfasst: Donnerstag 15. April 2010, 18:07
von EyDu
Mad-Marty hat geschrieben:String eingeben und dann String Method .isdigit() benutzen
Werf ich einfach mal so rein, ist imo der "richtige" weg.
Da stehst du aber relativ alleine auf deiner Seite ;-) Der try-except-Ansatz ist eigentlich Standard.

Verfasst: Freitag 16. April 2010, 14:04
von Horst
Danke Dav1d. Dein Weg funktioniert einwandfrei. Jetzt klapps

Verfasst: Samstag 17. April 2010, 17:15
von Dav1d
Gerne :)

Zu .isdigit:

Code: Alles auswählen

>>> int(-5)
-5
>>> '-5'.isdigit()
False

Re: Kontrollabfrage, ob eine Zahl eingegeben wurde

Verfasst: Samstag 23. Dezember 2017, 19:05
von STORMBREAKER
Ich würde einfach direkt nur eine Eingabe als Integer zulassen. Das geht mit:

Code: Alles auswählen

Eingabe = int(input("Eingabe:"))

Re: Kontrollabfrage, ob eine Zahl eingegeben wurde

Verfasst: Samstag 23. Dezember 2017, 19:33
von noisefloor
Hallo,

@STROMBREAKER: das ist schlechtweg falsch. Du kannst _alles_ eingeben - nur bekommst du eine Exception, wenn die Umwandlung nach Integer nicht funktioniert. Das wurde aber vor 7,5 Jahren in diesem Thread schon festgestellt...

Gruß, noisefloor