Datentypen in if-Anweisungen

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
lionsbook7
User
Beiträge: 5
Registriert: Dienstag 25. Juli 2023, 09:12

Hallo zusammen,

ich komm mir ziemlich dumm vor, hier so eine einfache Frage zu posten, aber ich bin wirklich noch ganz am Anfang von python und habe mich gefragt, ob es irgendwie möglich ist, Datentypen in eine if-Anweisung einzubauen.

Also zum Beispiel, dass man nur dann 5 addieren soll, wenn es sich auch um eine Gleitkommazahl handelt oder so. Meine dümpelhaften Ansätze waren dann so etwas wie:

if C = float: oder if C=float(C)

Aber Überraschung, da kamen immer Fehlermeldungen.
Ich weiß, dass ich es auch mit "try" und "except valueerror" machen könnte, also python einfach versuchen lassen könnte 5 zu addieren und wenn es eben nicht klappt, weiß man, dass es keine Gleitkommazahl ist, aber es würde mich einfach interessieren, ob und wenn ja wie das mit der if Anweisung funktioniert.

Danke jedenfalls schon mal fürs Durchlesen :)
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@lionsbook7: `C` sollte einfach eine Zahl sein, dann braucht man das nicht testen. Warum brauchst Du das denn?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Prinzipiell gebe ich __blackjack__ recht. Aber natürlich gibt es in Python eine Möglichkeit, den Typ zu prüfen. Es gibt `type`, aber flexibler wäre isinstance. Simples Beispiel: isinstance(5.0, float). Das führt dann aber auch dazu, dass du bei isinstance(5, float) als Ergebnis False erhältst, obwohl du mit der 5 genauso gut rechnen könntest. Dem kann man jetzt mit isinstance(5, (float, int)) begegnen, aber ehrlich gesagt möchtest du das gar nicht. Es gibt weitere Datentypen die man ebenfalls berücksichtigen müsste. Von daher: Wenn du erwartest, dass der Wert keinen korrekten Typ hat, dann fang den Fehler mit einer Exception ab. Und grundsätzlich solltest du dann schauen, wie es dazu kommen kann.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Man könnte dann auch `number.Number` importieren und ``isinstance(value, Number)`` schreiben — und hoffen das man damit dann tatsächlich alles erwischt mit dem man weiter rechnen kann.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
lionsbook7
User
Beiträge: 5
Registriert: Dienstag 25. Juli 2023, 09:12

Danke für eure Antworten! Ich muss tatsächlich gar nicht wirklich damit weiterrechnen. Es ist eine ganz simple Temperaturumwandlung von Grad Celsius in Kelvin und ich will eben als Art "Fehlermeldung" ausgeben "Dies ist keine gültige Eingabe für eine Temperatur", wenn man etwas Anderes als eine Gleitkommazahl eingibt...hoffe, das ist verständlich :)
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Solch eine Prüfung kann man einbauen, wenn der Nutzer einen String eingibt und Du versuchst, den in eine Zahl umzuwandeln.
Innerhalb einer Funktion, die vom Programmierer aufgerufen wird, macht man solche Prüfungen im Normalfall nicht, weil der Programmierfehler durch eine Exception an der Stelle auffällt, an der Du versuchst, mit dem Objekt etwas zu machen, was nur mit Zahlen geht.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Vor allem geht die Temperaturumwandlung auch wenn jemand eine ganze Zahl übergibt. Oder auch wenn es ein `decimal.Decimal`-Objekt ist. Oder ein Bruch. Oder… es gibt halt eine ganze Menge anderer Typen die auch Zahlen repräsentieren.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
lionsbook7
User
Beiträge: 5
Registriert: Dienstag 25. Juli 2023, 09:12

Ok alles klar, vielen vielen Dank :)
Antworten