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.
Hey liebe Community,
ich komme leider an einem Punkt nicht weiter mit meiner Temperatur Aufgabe...
ich habe die Vermutung das der Fehler bei der Einrückung von den if und else Befehlen liegt kann das sein...?
print("(a) Umrechnung von Celsius nach Kelvin")
print("(b) Umrechnung von Celsius nach Fahrenheit")
print("(c) Umrechnung von Kelvin nach Celsius")
print("(d) Umrechnung von Kelvin nach Fahrenheit")
print("(e) Umrechnung von Fahrenheit nach Celsius")
print("(f) Umrechnung von Fahrenheit nach Kelvin")
KBS= (input("Bitte einen Kennbuchstaben eingeben: "))
if KBS == "a" or KBS == "b" or KBS == "c" or KBS == "d" or KBS == "e" or KBS == "f":
print("Eingabe OK")
else:
print("Neue Eingabe eines Kennbuchstaben")
print("Bitte geben Sie einen Buchstaben von a bis f ein")
KBS= (input("Bitte einen Kennbuchstaben eingeben: "))
if KBS == "a" or KBS == "b" or KBS == "c" or KBS == "d" or KBS == "e" or KBS == "f":
KBS == "a"
if KBS == "a":
Temperatur = float(input("Bitte die Temperatur in Celsius eingeben: "))
if Temperatur < -273.15: [b]In dieser Zeile bekomm ich den Fehlercode: "unexpected indent"[/b]
print ("Temperatur liegt unter dem absoluten 0 Punkt von -273.15°C")
else:
TemperaturK = Temperatur + 273.15:
print(Temperatur, "°C = ",TemperaturK,"K")
else:
KBS == "b"
if KBS == "b":
Temperatur = float(input("Bitte die Temperatur in Celsius eingeben: "))
else:
print("Die Umrechnungen c,d,e,f sind noch nicht fertig.")
if Temperatur < -273.15:
print("Temperatur liegt unter dem absoluten 0 Punkt von -273.15°C")
else:
TemperaturF = 32 + 1.8 *Temperatur
print(Temperatur, "°C = ",TemperaturF,"F")
Ich habe mal deinem kleinen Programm etwas Struktur gegeben, damit du eine Basis hast auf der du aufbauen kannst. Ansonsten wird das ganze sehr unübersichtlich.
Wenn du noch nichts mit Funktionen gemacht hast, dann kannst du das halt später so verwenden.
def get_key():
while True:
print("(a) Umrechnung von Celsius nach Kelvin")
print("(b) Umrechnung von Celsius nach Fahrenheit")
print("(c) Umrechnung von Kelvin nach Celsius")
print("(d) Umrechnung von Kelvin nach Fahrenheit")
print("(e) Umrechnung von Fahrenheit nach Celsius")
print("(f) Umrechnung von Fahrenheit nach Kelvin")
print("(x) Programm beenden")
key = input("Bitte geben Sie einen Buchstaben von a bis f, oder x ein: ")
if key in "abcdefx":
return key
def celsius_to_kelvin():
temperatur = float(input("Bitte die Temperatur in Celsius eingeben: "))
if temperatur < -273.15:
print ("Temperatur liegt unter dem absoluten Nullppunkt von -273.15°C")
else:
print(f"{temperatur}°C = {temperatur + 273.15}°K")
def celsius_to_fahrenheit():
temperatur = float(input("Bitte die Temperatur in Celsius eingeben: "))
if temperatur < -273.15:
print("Temperatur liegt unter dem absoluten Nullpunkt von -273.15°C")
else:
print(f"{temperatur}°C = {32 + 1.8 * temperatur}°F")
def main():
while True:
choice = get_key()
if choice == "a":
celsius_to_kelvin()
if choice == "b":
celsius_to_fahrenheit()
if choice == "x":
print("Auf Wiedersehen")
break
if __name__ == "__main__":
main()
Einrückungen geben in Python an, was zu einem Block zusammengehört. Gerade bei langen, tief verschachtelten if-Abfragen kann man so etwas den Überblick bewahren. Z.b. zu welchem `if` gehört das `else` in Zeile 28? Es ist das if, das genauso weit eingerückt ist wie das else. Ist das so beabsichtigt?
In Zeile 8 sind die Klammern um den ganzen Ausdruck überflüssig. Benutze keine kryptischen Abkürzungen. Warum `KBS` und nicht `kennung` oder noch besser `auswahl`?
Variablennamen schreibt man in Python per Konvention komplett klein.
Die Vergleiche in Zeile 19 und 29 sind unsinnig, da mit dem Ergebnis nichts gemacht wird.
Beim Programmieren versucht man Dopplungen zu vermeiden: welche Auswahl erwartet als Eingabe die Temperatur in °Celsius? Die würde man dann in einem if-Block zusammenlegen und dann erst bei der Berechnung des Ergebnisses nochmal verzweigen.
@ThomasL: die if-Abfrage in `get_key` ist fehlerhaft, weil sie auch Eingaben wie "cde" durchläßt. Unter `key` verstehe ich etwas anderes, `get_choice` wäre passender, noch besser wäre natürlich `choose_conversion`.
Wenn man sich gegenseitig auschließende if-Anweisungen hat, wie in `main`, dann benutz man `elif`.