Python :: Aufgabe #267 :: Lösung #1
2 Lösungen
#267
flexible Temperaturumrechnung
Fortgeschrittener - Python
von Gnom
- 10.04.2020 um 11:24 Uhr
Gegeben sei ein String-Array mit einer beliebigen Anzahl von Temperaturangaben in °C, °F oder K (z. B. "24,5 °C", "74.3 °F" oder "-270 K"). Dabei sollen unterschiedliche Ausprägungen vorliegen: positive/negative Zahlen, Ganzzahlen/Kommazahlen, Trennung durch Punkt oder Komma, Angaben mit "°" oder ohne, Angabe der Einheit ("K"/"C"/"F", evtl. auch "k"/"c"/"f"), Variationen der Anordnung von Leerzeichen.
Das Programm soll nacheinander alle Strings analysieren und jeweils die Zahl und die Einheit ermitteln und in Variablen speichern, die Temperatur von der gegebenen Einheit in die beiden anderen Einheiten umrechnen und alle drei Werte geordnet mit einer Nachkommastelle ausgeben.
Das Programm soll nacheinander alle Strings analysieren und jeweils die Zahl und die Einheit ermitteln und in Variablen speichern, die Temperatur von der gegebenen Einheit in die beiden anderen Einheiten umrechnen und alle drei Werte geordnet mit einer Nachkommastelle ausgeben.
#1
von Klaus (1960 Punkte)
- 21.04.2020 um 14:03 Uhr
Der Umfang und die Komplexität der Aufgabe macht natürlich keinen OOP-Ansatz erforderlich. Eine einfache Darstellung über Funktionen wäre ausreichend. Ich persönlich mag einfach die Bündelung von Daten und Funktionen in einem Objekt.
Python-Code
class TemperatureConverter: """ input: Liste gemäß Aufgabendefinition print-output: formatierter String mit allen umgerechneten Temperaturwerten """ def __init__(self, data_list): self.temperature_data = [] # Liste der übergebenen Daten als TemperatureData-Objekt self.return_string = '' # Rückgabestring for element in data_list: self.temperature_data.append(self.__convert_to_tempdata(element)) # Umwandlung in TemperatureData-Objekt for element in self.temperature_data: self.return_string += element.return_results() + '\n' # Erzeugt den Ausgabetext für den Datensatz def __convert_to_tempdata(self, element): sign = '+' # speichert das Vorzeichen value = '' # speichert den Wert unit = '' # speichert die Einheit for letter in element: if letter.isnumeric(): value += letter elif letter == '-': sign = '-' elif letter in '. ,'.split(): value += '.' elif letter.lower() in 'c f k'.split(): if unit != '': # Es wurde mehr als eine Einheit angegeben raise Exception unit = letter.lower() convert_value = sign + value if unit == '': # Es wurde keine Einheit angegeben raise Exception return TemperatureData(float(convert_value), unit) def __str__(self): return self.return_string class TemperatureData: def __init__(self, value, unit): self.unit = unit self.value = value self.data = {'c': 0, 'f': 0, 'k': 0, self.unit: self.value} self.__calculate_data() # Berechnet das vollständige Dictionary def __calculate_data(self): if self.unit == 'c': self.data['f'] = self.__c_to_f(self.value) self.data['k'] = self.__c_to_k(self.value) elif self.unit == 'f': self.data['c'] = self.__f_to_c(self.value) self.data['k'] = self.__f_to_k(self.value) elif self.unit == 'k': self.data['c'] = self.__k_to_c(self.value) self.data['f'] = self.__k_to_f(self.value) def __c_to_f(self, value): return 32 + (value * (9/5)) def __c_to_k(self, value): return 273.15 + value def __f_to_c(self, value): return ((value - 32) * (5/9)) def __f_to_k(self, value): return (value - 32) * (5/9) + 273.15 def __k_to_c(self, value): return value - 273.15 def __k_to_f(self, value): return (value - 273.15) * (9/5) + 32 def return_results(self): return_string = f"{round(self.data['c'],1):9.1f} Grad Celsius," \ f"{round(self.data['f'],1):9.1f} Grad Fahrenheit," \ f"{round(self.data['k'],1):9.1f} Kelvin" return return_string if __name__ == '__main__': try: print(TemperatureConverter(["24,5 °C", "74.3 °F", "-270 K"])) except: print('Falsches Datenformat. Bitte prüfen Sie, ob ihre Eingabe den Aufgabenbedingungen entspricht.')
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1