Seite 1 von 2
Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 09:40
von Knampf
Hallo
Ich habe vor ~2Tagen mit Python angefangen und da müsste ich noch einiges vertrauter werden mit den Grundlagen.
Anscheinend gibt es eine voreingestellte "isFloat"-Funktion, wie in einem anderen Forum jemand schrieb, bei mir funktionierte sie aber nicht, obwohl ich dasselbe eingegeben habe. Dann habe ich einem anderen Post nach versucht, eine isFloat-Funktion selbst zu definieren, das funktionierte auch nicht. Ich poste einfach mal, womit ich stehen geblieben bin und bin natürlich offen für jegliche Lösungen:

Ich habe es ein wenig modifiziert, weil alles andere nicht ging.
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 09:49
von sls
Ich sehe kein Bild. Ansonsten ist `isinstance()` dein Freund.
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 10:20
von Sirius3
Statt ein Bild zu posten, schreib den Code ins Forum mit code-Tags </>.
Eine isFloat-Funktion gibt es nicht im Standardumfang. Nach dem Bild zu urteilen ist irgendetwas woanders falsch. Einrückungen per Tab / Space (sieht man dem Bild halt nicht an)? Statt explizit auf == True oder ==False zu prüfen (was wiederum nur einen Wahrheitswert liefert), läßt man das == True einfach weg, oder prüft auf `not ...`.
Nackte excepts nie verwenden. In der Funktion isfloat erwartest Du einen ValueError, und nur der sollte abgefangen werden.
Code: Alles auswählen
def isfloat(x):
try:
float(x)
except ValueError:
return False
else:
return True
number = input("Zahl eingeben")
if not isfloat(number):
print("keine Zahl")
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 10:56
von Knampf
Ich habe deinen Code eins zu eins kopiert und auch nichts anderes in dem pythondokument stehen. Wenn ich als input ,,1" eingebe, wird nichts geprintet und das Programm ist finished. Wenn ich ,,1.23" eingebe, wird nichts geprintet und das Programm ist finished.
Wie sähe denn isinstance als Code aus? Das habe ich schon versucht, ging aber nicht.
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 11:04
von Sirius3
@Knampf: `isinstance` hilft Dir hier nicht. Und ja, es wird nur etwas ausgegeben, wenn man keine Zahl eintippt. So ist die if-Bedingung formuliert.
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 11:34
von Knampf
Dann war das wohl ein sehr grundlegender Fehler von mir. Sind dann Integers Floats? Ich dachte, Nichtkomma-Zahlen (Integer) und Kommazahlen (Float) wären getrennt. Wie kann ich prüfen, ob die Zahl Nachkommastellen hat, die größer sind als 0? Danke schonmal für die ganze Hilfe.
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 11:47
von __blackjack__
@Knampf: `int` und `float` *sind* verschiedene Typen, aber man kann selbstverständlich Gleitkommazahlen haben die keinen Nachkommaanteil haben – die werden nicht auf magische Weise zu `int`. Um zu prüfen ob eine Gleitkommazahl nur 0en hinter dem Dezimalpunkt hat gibt es mehrere Möglichkeiten. Zum Beispiel den Wert mit dem Vergleichen was bei der Umwandlung mit `int()` heraus kommt, oder ob bei dem Wert modulo 1 eine 0 heraus kommt. Wobei ich für den Vergleich nicht ``==`` noch auf `math.isclose()` hinweisen möchte, weil Vergleiche mit Gleitkommazahlen so ihre Tücken haben können. Im vorliegenden Fall, wenn die Eingabe direkt vom Benutzer kommt, ist das kein Problem, aber wenn der Wert durch Berechnungen zustande kommt, kann es Dir passieren das ein Wert der eigentlich keine Nachkommastellen haben sollte, doch welche hat, aber gaaaanz weit hinten erst.
Wozu brauchst Du das denn überhaupt?
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 13:07
von Knampf
Ich fange gerade an mit kleinen Projekten zum Lernen. Das ist meine Hauptquelle:
https://www.youtube.com/watch?v=rfscVS0vtbw
Ich kann dir genau sagen, was ich damit konkret machen möchte: Ich möchte einen Taschenrechner basteln, der errorproof ist.
1. Zahl 1 eingeben und prüfen, ob es eine Zahl ist (kann int oder float sein) - wenn Zahl, nächster Schritt, wenn nicht, verlange wieder die Eingabe von Zahl 1 solange die Eingabe keine Zahl ist.
2. Operator eingeben und prüfen, ob es ein Operator ist. wenn ja, weiter, wenn nein, eingabeaufforderung bis es passt #Den Teil habe ich schon ziemlich gut hinbekommen
3. gleiche wie Zahl 1, nur für Zahl 2
4. Prüfen, welcher Operator vorliegt und Zahl 1 und Zahl 2 passend zum Operator verrechnen (dass er ,,+" macht, wenn eingabe = +, dass er ,,-" macht, wenn eingabe = - und so weiter) #Den Teil habe ich fertig, wie im Video mit mehreren ifs und es hat funktioniert.
Nachtrag: Und natürlich das Ergebnis printen.
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 13:46
von Chr0medome
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 13:51
von kbr
Knampf hat geschrieben: Mittwoch 6. Februar 2019, 13:07
1. Zahl 1 eingeben und prüfen, ob es eine Zahl ist (kann int oder float sein) - wenn Zahl, nächster Schritt, wenn nicht, verlange wieder die Eingabe von Zahl 1 solange die Eingabe keine Zahl ist.
Das kannst Du prima mit Type-Conversion und Exception-Handling umsetzen.
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 13:57
von Chr0medome
Einen Taschenrechner basteln? Python selbst ist doch schon Taschenrechner genug?
Lerne doch lieber mit projecteuler.net
Falls du aber unbedingt ein Programm schreiben willst...:
Code: Alles auswählen
def offset(val1, val2, op):
if op == "+":
return val1 + val2
elif op == "/":
pass
elif op == "*":
pass
elif op == "-":
pass
val1 = input(": ")
while type(val1) not in [float, int]:
val1 = input(": ")
(Code nicht getestet)
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 14:06
von Chr0medome
Mir fällt außerdem gerade ein, dass du auch eval() benutzen könntest... Ist aber noch hässlicher als mein letzter Lösungsvorschlag.
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 14:08
von Sirius3
@Chr0medome: (Code nicht getestet) heißt, er tut nicht, denn `input` liefert immer den Typ str zurück. Falls es doch eine Funktion gibt, die verschiedene Eingaben in verschiedene Typen konvertieren kann, würde man hier wie `sls` schon geschrieben hat, mit isinstance arbeiten: `isinstance(val1, [float, int])`. Mit `eval` lernt man ja nichts, außer, welche Funktionen man am besten nicht nutzt.
@Knampf: und wo konkret kommst Du jetzt bei der Umsetzung des Taschenrechners nicht weiter?
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 14:30
von __blackjack__
@Knampf: Aus der Beschreibung wird mir jetzt so überhaupt nicht klar warum Du testen willst ob eine Zahl Nachkommastellen hat oder nicht. Für den Taschenrechner an sich reicht es doch völlig aus mit Gleitkommazahlen zu arbeiten. Und eine Funktion zum Testen ob eine Eingabe in eine Zahl umwandelbar wäre brauchst Du nicht, denn Du willst ja nicht nur das wissen, sondern es tatsächlich auch *machen*, also *mach* das einfach und behandle entsprechend die Ausnahme die auftritt wenn die Umwandlung nicht funktioniert hat.
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 15:02
von Knampf
Hier genau komme ich nicht weiter: Ich möchte eine Schleife, die läuft, solange die Eingabe keine Zahl ist. Wie stelle ich diese Schleife her?
Code: Alles auswählen
num1 = input("Enter number 1: ")
while num1 not in float:
input("Enter number 1: ")
Das sollte eigentlich reichen. ,,TypeError: argument of type 'type' is not iterable" Jetzt muss es geschafft werden, dass er die Zahlenprüfung erkennt.
Ich habe es schon mit einer While, try, except-Kombination versucht.
Nachtrag: Die Schleife soll auch errorabgesichert sein.
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 15:37
von Sirius3
Wie hast Du am Anfang getestet, ob eine Eingabe eine Zahl ist, und wie prüfst Du es jetzt? Und warum? Wo Du doch merkst, dass die neue Variante nicht funktioniert.
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 15:39
von /me
Vorzugsweise erstellt man sich dafür eine Funktion.
Code: Alles auswählen
def input_float(message, errortext=None):
while True:
try:
return float(input(message))
except ValueError:
if errortext:
print(errortext)
value = input_float('Her mit der Zahl: ', 'Bitte eine Zahl eingeben')
Es gibt dort eine Endlosschleife (while True). In dieser Schleife wird versucht, eine Eingabe in einen Fließkommawert zu konvertieren und diesen zurückzugeben wodurch die Schleife verlassen wird. Gelingt die Konvertierung nicht, dann wird eine Exception vom Typ ValueError ausgelöst, entsprechend behandelt und anschließend wird die Schleife erneut durchlaufen.
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 15:55
von __blackjack__
@Knampf: Der Code sieht extram nach „programmieren durch raten“ aus – das funktioniert nicht.
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 21:20
von Knampf
Ich bin gerade neu beim Programmieren und brauche Starthilfe... Ich habe schon an sämtlichen Orten im Internet gesucht und keine Lösung gefunden, deswegen bin ich jetzt hier und versuche es mit Kommunikation. Raten war alternativ zum Posten meine einzige Möglichkeit.
/mes Lösung und Erklärung war von allen empfohlenen die beste. Ich muss mich noch mit den Strukturen vertraut machen, dass ich weiß, was genau die einzelnen Bestandteile wie ,,return" und ,,value" heißen. Programmierung mache ich, abgesehen von einem Grundkurs in der Schule, in dem ich kaum mitgekommen bin, seit ~3 Tagen.
Re: Wie kann man Variablen prüfen, ob sie Float sind?
Verfasst: Mittwoch 6. Februar 2019, 22:34
von kbr
Anzufangen ist nichts, wofür man sich rechtfertigen müsste. Lernen ist immer gut, ausprobieren auch – aber einfach nur raten ist schlecht. Denn es widerspricht dem Verstehen – also dem Lernen.
Die Lösung von /me wurde Dir in einigen Beiträgen schon zuvor genannt. Er aber war so nett, es Dir auch zu implementieren.
Wenn Du nicht weißt, was ValueError und return bedeuten, aber Spaß am Programmieren hast und dies gerne lernen möchtest, dann empfehle ich (wenn es deutschsprachig sein soll) das Buch von Michael Weigend (Python 3). Das eignet sich für Einsteiger als Lesebuch, zum Selbststudium, als Nachschlagewerk und enthält relativ wenig Fehler (Bücher werden von Menschen gemacht und enthalten immer Fehler).
Aber versuche nicht zu raten, sondern zu verstehen. Das ist viel besser. Dabei helfen dann manchmal auch ausformulierte Beispiele wie von /me.