Wie findet ihr diesen Python Code?
Wie findet ihr diesen Python Code?
Ich habe ein kleines Programm in Python geschrieben die verschiedenen Temperaturen in andere umwandelt. Mich würde eure Meinung sehr interessieren.
Schon mal danke im Voraus für das Feedback.
Hier ist der Code:
https://github.com/tibor20319/tibor20319/blob/main/Temperatur%20Umwandler.py
8 Stimmen
5 Antworten
Warum ist die Eingabe -300 für Fahrenheit erlaubt, aber nicht für Celsius und Kelvin? Wenn schon, würde ich überall auf xxx_to_kelvin(temp)>=0 testen.
Warum werden bei der Umrechnung von Fahrenheit so viele Nachkommastellen ausgegeben?
Warum muss man nach dem Beenden nochmal eine Taste drücken?
Warum muss man überhaupt so viele Tasten drücken? Eingaben der Form <Zahl><Einheit> (z.B. "273 K") wären viel bequemer, und ausgeben kannst Du immer alle drei Einheiten ("273.00 K = -0.15 °C = 31.73 °F"). Beendet wird das Programm mit einer leeren Eingabe.
Wieso treibst Du so viel Aufwand bei der Prüfung der Temperatureingabe, schlampst aber bei der Auswahloption? Und hast Du auch mal die Eingabe "nan" oder "-inf" getestet?
Und last not least: Dein Programm ist praktisch nicht erweiterbar. Baue noch zwei weitere Einheiten mit ein, dann wird nichts mehr funktionieren. Eine Alternative wäre, nur die Parameter (m, c) für die Umrechnung von und zu einer Basiseinheit zu speichern:
Einheiten = {
C: ( 1, 0, "Celsius", "°C" ) # Basiseinheit
F: ( 9/5, 32, "Fahrenheit", "°F" )
K: ( 1, -273.15, "Kelvin", "K" )
}
Dann brauchst Du nur noch zwei Umrechnungsfunktionen
def toC ( temp, unit ) : return unit[0]*temp + unit[1]
def fromC ( temp, unit ) : return (temp-unit[1]) / unit[0]
und kannst damit alles erschlagen. Wenn jetzt noch weitere Einheiten dazukommen, brauchst Du im Idealfall nur eine neue Zeile im dict Einheiten.
Ich würde im Hauptteil der Anwendungen ein paar Verbesserungen vornehmen:
- while true ist ein Code-Smell. Ersetze das durch eine geeignete Abbruchbedingung, damit sofort ersichtlich ist, wann die Schleife endet. Endlosschleifen sollte man vermeiden.
- Der Code in der Schleife wiederholt sich sehr. Baue das etwas um.
- Die Konstante mit dem absoluten Nullpunkt auch im oberen Teil verwenden
Ich würde das mit structural matching machen wollen:
match(option):
case 1:
.....
case 2:
.....
Oder alternativ natürlich gleich ganz anders, Für die Umrechungen eine liste, die funktion als Lambda hinterlegen und Dein einfach über dne Infex aufrufen :-D.
Grundsätzlich ein guter Code. Mich wundert nur das du oben den Absoluten Nullpunkt als Variable definierst und dann unten es trotzdem als Zahl schreibst.
Im allgemeinen ist er recht übersichtlich, würde dir aber empfehlen Verben zu benutzen.