Seite 1 von 1

Ich hänge leider fest...

Verfasst: Mittwoch 4. Mai 2022, 17:42
von Flashpoint
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...?

Wäre euch sehr dankbar um etwas Hilfe :)

Code: Alles auswählen

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")

Re: Ich hänge leider fest...

Verfasst: Mittwoch 4. Mai 2022, 19:50
von Dennis89
Hallo,

wieso ist die Zeile 22 weiter eingerückt, als 21?

Grüße
Dennis

Re: Ich hänge leider fest...

Verfasst: Donnerstag 5. Mai 2022, 07:27
von Flashpoint
Vielen Dank für die Antwort daran hat es wirklich gelegen :)
Bekomme aber leider noch eine Fehlermeldung in Zeile 25 "SyntaxError: invalid syntax" ...

Re: Ich hänge leider fest...

Verfasst: Donnerstag 5. Mai 2022, 07:32
von ThomasL
Dann schau doch mal ganz ans Ende dieser Zeile ;-)

Re: Ich hänge leider fest...

Verfasst: Donnerstag 5. Mai 2022, 07:57
von ThomasL
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.

Code: Alles auswählen

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()

Re: Ich hänge leider fest...

Verfasst: Donnerstag 5. Mai 2022, 07:59
von Sirius3
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.

Re: Ich hänge leider fest...

Verfasst: Donnerstag 5. Mai 2022, 17:52
von Flashpoint
Wow vielen lieben Dank damit kann ich wirklich sehr gut arbeiten, dankeschön :)

Re: Ich hänge leider fest...

Verfasst: Donnerstag 5. Mai 2022, 18:15
von Sirius3
@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`.