Seite 1 von 1

Zahl mit Input

Verfasst: Sonntag 2. Dezember 2012, 12:46
von Schwarze_Mamba
Wi kriege ich es hin, dass ich mit Input() eine Zahl und keinen String bekomme.
Ich Versuche gerade folgenden Code:

Code: Alles auswählen

num1 = input("Erste Zahl: ")
        num2 = input("Zweite Zahl: ")
        try:
            float(num1)
            float(num2)
            float(num3)
            num3 = num1 + num2
            print(num1 + " + " + num2 + " + " + " = " + num3)
        except:
            print("Das war keine Zahl")
Ich erhalte entweder den Exceept-Fehler oder z.B. 1+2=12

Schwarze_Mamba

Re: Zahl mit Input

Verfasst: Sonntag 2. Dezember 2012, 13:07
von sparrow
float() ist eine interne Funktion. Funktionen geben etwas zurück. Das muss dann aber auch an einen Namen gebunden werden.

Re: Zahl mit Input

Verfasst: Sonntag 2. Dezember 2012, 13:15
von BlackJack
@Schwarze_Mamba: ``+`` hat bei Zahlen und bei Zeichenketten eine unterschiedliche Bedeutung. Du musst die Werte jeweils Umwandeln um die richtige Bedeutung im jeweiligen Ausdruck zu bekommen.

Du solltest mit ``except:`` vorsichtig sein. Wenn Du das so schreibst, dann wird für *jede* Ausnahme einfach nur „Das war keine Zahl” ausgegeben. Das ist nicht hilfreich denn so siehst Du den Programmfehler nicht der dadurch entsteht dass Du `num3` verwendest obwohl es noch gar nicht definiert ist.

Re: Zahl mit Input

Verfasst: Sonntag 2. Dezember 2012, 15:19
von pixewakb
Das Problem bei deinem Quelltext ist m. E., dass du zwar den Typ der Variablen mal tauschst, aber das nicht wieder speicherst:

Code: Alles auswählen

>>> zahl = "4"
>>> float(zahl)
4.0
>>> type(zahl)
<class 'str'>
Im Prinzip müsstest du etwas der folgenden Form machen:

Code: Alles auswählen

>>> zahl = "4"
>>> zahl = float(zahl)
>>> zahl
4.0
>>> type(zahl)
<class 'float'>
Good luck!

Re: Zahl mit Input

Verfasst: Sonntag 2. Dezember 2012, 15:44
von pixewakb
Die Einrückung in deinem Quelltext ist auch murks!?

Code: Alles auswählen

num1 = input("Erste Zahl: ")
num2 = input("Zweite Zahl: ")

try:
    num3 = float(num1) + float(num2)
    print(num1 + " + " + num2 + " + " + " = " + str(num3))
except:
    print("Das war keine Zahl")
Shell:

Code: Alles auswählen

>>> 
Erste Zahl: 18
Zweite Zahl: 21
18 + 21 +  = 39.0
>>> 

Re: Zahl mit Input

Verfasst: Dienstag 4. Dezember 2012, 08:56
von kevind
Wie wärs mit sowas:

Code: Alles auswählen

try:
    eingabe1 = int(input("eingabe1:"))
    eingabe2 = int(input("eingabe2:"))
    print("{0} + {1} = {2}".format(eingabe1,eingabe2,eingabe1+eingabe2))
except:
    print("fehler bei eingabe")
Hier wird schon während der Eingabe überprüft ob der Wert ein INT ist.

Durch die format Methode wird das ganze auch gleich übersichtlicher.

Greez

Re: Zahl mit Input

Verfasst: Dienstag 4. Dezember 2012, 09:18
von JonasR
kevind hat geschrieben:Wie wärs mit sowas:

Code: Alles auswählen

try:
    eingabe1 = int(input("eingabe1:"))
    eingabe2 = int(input("eingabe2:"))
    print("{0} + {1} = {2}".format(eingabe1,eingabe2,eingabe1+eingabe2))
except:
    print("fehler bei eingabe")
Hier wird schon während der Eingabe überprüft ob der Wert ein INT ist.

Durch die format Methode wird das ganze auch gleich übersichtlicher.

Greez
Da wird nichts während der Eingabe geprüft. Ist das gleiche in grün nur in einer Zeile und mit int statt float.

Re: Zahl mit Input

Verfasst: Dienstag 4. Dezember 2012, 09:20
von BlackJack
@kevind: Da ist immer noch das Problem, dass das „nackte” ``except:`` *jede* Ausnahme behandelt und so Fehler die nichts mit der Umwandlung der Zahlen zu tun haben „verschluckt”.

Re: Zahl mit Input

Verfasst: Dienstag 4. Dezember 2012, 09:32
von kevind
JonasR hat geschrieben:
kevind hat geschrieben:Wie wärs mit sowas:

Code: Alles auswählen

try:
    eingabe1 = int(input("eingabe1:"))
    eingabe2 = int(input("eingabe2:"))
    print("{0} + {1} = {2}".format(eingabe1,eingabe2,eingabe1+eingabe2))
except:
    print("fehler bei eingabe")
Hier wird schon während der Eingabe überprüft ob der Wert ein INT ist.

Durch die format Methode wird das ganze auch gleich übersichtlicher.

Greez
Da wird nichts während der Eingabe geprüft. Ist das gleiche in grün nur in einer Zeile und mit int statt float.
Nagut vl. ist "überprüft" das falsche Wort aber ist der Input kein Zahlenwert gibts ne exception. Ist für mich doch irgendwo ne Kontrollinstanz...

Wäre es schöner ne Funktion zu haben welche überprüft was für eine art der Eingabe erfolgte ? Oder wie stellt ihr euch nen ordentliches Try/except vor ?

Für mich wär der Fall mit der Exception nicht so schlimm ... :oops: sry

Und danke!

Re: Zahl mit Input

Verfasst: Dienstag 4. Dezember 2012, 09:43
von JonasR
Die Überpfrüfung des Typs hast du bei dem Code von pixewakb auch ;)
Am besten im except "ValueError" abfangen, damit ist man vor falscheingaben erstmal auf der sicheren Seite und bekommt andere Fehler auch noch mit.

Re: Zahl mit Input

Verfasst: Dienstag 4. Dezember 2012, 09:45
von kbr
Dies sind gerne gemachte Fehler bei try/except:
  • 1. zu viele Statements zwischen try und except.
    2. pauschales Abfangen aller Exceptions.
Beides erschwert die Fehlersuche oder verhindert sogar das erkennen eines Fehlers überhaupt.

besser:

Code: Alles auswählen

try:
    a = float(input("Zahl 1:"))
    b = float(input("Zahl 2:"))
except ValueError:
    print "Bitte nur Zahlen eingeben"
else:
    print a + b

Re: Zahl mit Input

Verfasst: Dienstag 4. Dezember 2012, 12:59
von kevind
Ah so genau hatte ich das noch nicht betrachtet...
So ist das natürlich schon besser.

http://tutorial.pocoo.org/errors.html

Hier ne nette Anleitung dazu.

Danke!