Seite 1 von 1

Konvertierung von Formaten

Verfasst: Donnerstag 31. Januar 2019, 10:32
von fil3000
Liebe Community,

ich bin neu in Python und neu hier, also hallo =)

Ich komme aber gleich zum Punkt: Ich möchte einen Taschenrechner programmieren, glaube aber nicht, dass der Thread in das wissenschaftliche Forum gehört, da es sich eher um Schwierigkeiten mit der Python Syntax handelt. Es ist sicher nichts, was nicht lösbar ist.

An einer Stelle sollen Logarithmen berechnet werden. Anstatt vorher auswählen, welche Basis man nimmt, ob es sich also um log, lg, ln, ... handelt, möchte ich die Eingabe frei gestalten. Das heißt, es soll eine Zahl eingegeben werden. Um bei Fehleingaben nicht abzubrechen, verwende ich try, sodass man eine Meldung erhält "Bitte eine Zahl eingeben Blabla", wenn der input nicht float ist. Es soll aber Ausnahmen, z. B. e als Eingabe geben, so dass der eingegebenen Zahl dann der Wert math.exp(1) zugewiesen wird. Ich bekomme aber die untenstehende Fehlermeldung. Habt ihr eine Idee?

Danke schon mal für eure Zeit.

Das funktioniert (ohne die e-Ausnahme):

Code: Alles auswählen

import math

print('log a (b) [Log a zur Basis b]')
while True:
    try:
        a = float(input('a = '))
        break
    except ValueError:
        print('Zahl, bitte.')

while True:
    try:
        b = float(input('Basis = '))
        break
    except ValueError:
        print('Zahl, bitte.')
        
print(math.log(a,b))
Ich dachte ich kann jetzt bei dem ValueError einfach schauen, ob es sich bei der nicht-float-Eingabe um den Buchstaben e handelt und wenn ja, den Wert der Zahl e zuweisen:

Code: Alles auswählen

while True:
    try:
        b = float(input('Basis = '))
        break
    except ValueError:
        if b == e:
            b = math.exp(1)
        else:
            print('Zahl, bitte.')
Dort bekomme ich jedoch diesen Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "/Users/fil3000/PycharmProjects/python3_buch/2_while/Rechner 2.0.py", line 13, in <module>
    b = float(input('Basis = '))
ValueError: could not convert string to float: 'e'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/fil3000/PycharmProjects/python3_buch/2_while/Rechner 2.0.py", line 16, in <module>
    if b == e:
NameError: name 'b' is not defined

Re: Taschenrechner 2.0

Verfasst: Donnerstag 31. Januar 2019, 10:51
von __deets__
Du musst halt den Wert von input *zuerst* an eine Variable "eingabe" zB binden, und den *dann* versuchen zu konvertieren - und wenn das fehlschlaegt, kannst du weitergehende Pruefungen machen.

Re: Konvertierung von Formaten

Verfasst: Donnerstag 31. Januar 2019, 11:00
von fil3000
Hi,

danke schonmal. Aber dann kann ich die Eingabe bei einer ungültigen Eingabe doch nicht mehr in der Schleife haben... oder?

LG

Re: Konvertierung von Formaten

Verfasst: Donnerstag 31. Januar 2019, 11:26
von __deets__
Wieso nicht? Das hat doch keinerlei Einfluss auf den umgebenden Code.

Re: Konvertierung von Formaten

Verfasst: Donnerstag 31. Januar 2019, 11:28
von ArtooDetoo
Darüberhinaus fehlen im Vergleich die Anführungszeichen um e

Re: Konvertierung von Formaten

Verfasst: Freitag 1. Februar 2019, 05:33
von __blackjack__
@fil3000: Ich würde den Test auf 'e' als Eingabe dann aber auch *vor* dem Versuch machen die Eingabe in eine Zahl zu wandeln. Und dann die Schleife auch in eine Funktion zu verpacken statt sie zweimal in den Quelltext zu kopieren.