Wie findet ihr diesen Python Code?

Das Ergebnis basiert auf 8 Abstimmungen

Der Code ist verbesserungsfähig 100%
Der Code ist gut 0%
Der Code enthält Grundlegende Fehler 0%

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Der Code ist verbesserungsfähig

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.

Der Code ist verbesserungsfähig

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
Der Code ist verbesserungsfähig

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.

Der Code ist verbesserungsfähig

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.

Woher ich das weiß:Hobby – Hobby Programmierer von kleinen Spielen, Websites und Bots

Im allgemeinen ist er recht übersichtlich, würde dir aber empfehlen Verben zu benutzen.