Wie kann man Variablen prüfen, ob sie Float sind?

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.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Knampf: Der Code sieht extram nach „programmieren durch raten“ aus – das funktioniert nicht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Knampf
User
Beiträge: 7
Registriert: Mittwoch 6. Februar 2019, 09:29

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.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

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.
Knampf
User
Beiträge: 7
Registriert: Mittwoch 6. Februar 2019, 09:29

Ich versuche immer, zu verstehen. Ich habe mit Fundament geraten, mit den verhältnismäßig wenigen Dingen, die mir zur Vergfügung standen. Jetzt, wo ich besser weiß, was ich nicht weiß, gucke ich wieder spezifische Videos. Für mich ist Lernen immer ein Mix aus ,,was andere schon gemacht haben", dann versuchen, das selbst anzuwenden und zusätzlich irgendwo in dem Vorgang selbst experimentieren. Dann hättte es in der ganzen Menschheitsgeschichte keinen Fortschritt gegeben, wenn nie geraten worden wäre oder Dinge nicht zufällig entdeckt worden wären. Hier weise ich mal auf das Beispiel Penicillin hin: Alexander Fleming hat eine Bakterienprobe 2 Wochen (oder so) vergessen, hat sie dann wieder entdeckt und hat gesehen, dass dabei etwas entstanden ist, das stark desinfizierend wirkt. Selbst in vermeintlich rein logisch scheinenden Fächern wie Physik und sogar Mathe wirkt Kreativität ,,Wunder".

Ich habe in keinem anderen Post eine gleich Lösung wie von /me gefunden. Es hat zum Beispiel kein anderer (soweit ich es gesehen habe) einen Alternativtext eingegeben, falls der Input keine Zahl ist (,,'Bitte eine Zahl eingeben'") und die Schleife habe ich in der Form vorher auch nicht gefunden.

Das ist übrigens nicht zum Nörgeln, sondern zum Erklären, weil ich mich noch nicht ganz verstanden fühle. Ist ja auch schön, dass mir überhaupt geantwortet wird und deine Buchempfehlung finde ich auch super. Mir ist halt aufgefallen, dass mir von ~20 Antworten nur ~ 3 oder 4 wirklich geholfen haben und das fand ich nennenswert. Am Anfang lernt man tendenziell das meiste, versteht also auch das meiste noch nicht. Dann noch viel Spaß und so weiter. Beim Programmieren bleibe ich auf jeden Fall.
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das Penicillin-Beispiel ist sehr unpassend, weil das genau die Art von offen, wild, planlos herum raten ist, die beim Programmieren nicht funktioniert. Wenn man auf dieses Glück angewiesen wäre, was ja wirklich ein extrem glücklicher Zufall war das er das a) vergessen und b) sein Assistent die Proben nicht zufällig vor den zwei Wochen schon entsorgt/gereinigt hat, wie er das sonst eigentlich getan hätte, dann würde man beim Programmieren gar nicht voran kommen.

Gleich in der zweiten Antwort ist Dir hier Ausnahmebehandlung speziell für das Umwandeln von Zeichenketten in Gleitkommazahlen gezeigt worden, wie man darauf reagieren kann wenn so eine Umwandlung fehl schlägt. Das wäre zwar etwas redundant gewesen diese `is_float()`-Testfunktion zu verwenden, aber es wäre auf jeden Fall schon mal gegangen und hätte das Problem gelöst.

Und eine ``while``-Schleife zeige/erkläre ich hier keinem. Das steht in jedem Grundlagentutorial und wir sind hier nicht dazu da den Leuten aus vorhandenen Grundlagentutorials ”vorzulesen”. Denn eigentlich wäre es dann ja nur von da abschreiben, damit das hier statt dort gelesen werden kann, denn lesen und verstehen muss das schon der Fragesteller selbst. Das kann man niemandem abnehmen.

Ich denke Du willst mit Deinen 2-3 Tagen Python einfach ein bisschen viel auf einmal. Wenn das Grundlagentutorial welches Du ja hoffentlich durcharbeitest, nach der Zeit noch keine Ausnahmebehandlung durchgenommen hat, dann kannst Du die halt auch noch nicht benutzen. Was ja auch kein Beinbruch ist erst einmal davon auszugehen, dass der Benutzer bei der Aufforderung eine Zahl einzugeben, tatsächlich nur eine Zahl eingibt. Setz den Taschenrechner mit den Mitteln um die Dir bereits bekannt sind, und immer wenn im Tutorial etwas dran kommt was sich eignet um den Taschenrechner zu verbessern, ändere und erweitere das Programm entsprechend.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@Knampf: Dein Vergleich hinkt. Hier geht es um die Aneignung von Grundlagen und nicht um die Entdeckung von etwas völlig Neuem. Für dich mag es ja neu sein, aber du solltest dir besser vorhandene Kenntnisse zunutze machen, d.h. vorliegendes Lernmaterial (z.B. Tutorials) für dich nutzen. Damit lernt man zigmal schneller als durch reines Raten.

Klar probiert man dann vieles aus, bevor man wirklich die Zusammenhänge verstanden hat, aber das ist dann auch ein höheres Niveau im Gegensatz zum komplett planlosen Vorgehen. So erkundet man vielleicht als Dreijähriger erfolgreich die Welt, aber so lernt man sicherlich nicht Programmieren.
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Kreativität und Ausprobieren kann erst beginnen, wenn man die Grundlagen beherrscht.
Wie heißt es so schön: Wir stehen alle auf den Schultern von Giganten. Es ist aber nicht nötig unten am Knöchel rumzufummeln. Wenn dann muss man oben aufbauen.
Antworten