Seite 1 von 1

Hilfe beim Verständnis if/else

Verfasst: Sonntag 27. September 2020, 15:12
von Chrisu
Hallo Leute!


Wie ich ja schon anders wo geschrieben habe, bringe ich mir gerade Python bei und habe mir im Netz ein paar Anfänger Aufgaben herausgesucht.
Ich sitze nun schon ein paar Stunden bei dieser Aufgabe und komme einfach nicht drauf wo der Fehler liegt...

Bild

Mein Code dazu:

Code: Alles auswählen

input('Funktioniert das System? J/N ... ')
if input == 'J':
    print('Dan Fummel nicht dran rum!')
    print('Alles  ist gut ;)')
else:
    input('Bist du dran Schuld J/N ...')
    if input == 'N':
        print('Dan trifft es dich nicht!')
    else:
        print('Du Idiot!')
        input('Hat es jemand gemerkt? J/N ... ')
        if input == 'N':
            print('Man wird dich eh nicht finden!')
        else:
            print('Du bist im Arsch!')
            input('Kannst du einem anderem die Schuld zuschieben? J/N ... ')
            if input == 'N':
                print('Dan bist du wirklich im Arsch!')
            else:
                print('Keine Sorge! Dan ist jemand anders im Arsch')

Wenn ich die Benutzereingabe mit 'N, J, J, N' ablaufe, läuft es bis zum vorletzten if/else Block normal, letzter passt dan wieder nicht.
Ich glaube dass ich irgendwo einen Einrück oder Denkfehler habe, aber wie ich es auch drehe und wende, sobald ich bei der ersten Eingabe 'J' drücke, geht`s schon in die falsche Richtung.


Könnte mir bitte jemand auf Anfängerisch (xD) erklären woran es hier happert?


Danke euch vielmals!!


Lg Chris

Re: Hilfe beim Verständnis if/else

Verfasst: Sonntag 27. September 2020, 16:02
von Sirius3
`input` ist eine Funktion. Die kann niemals gleich "J" oder "N" sein. Du landest also immer im else-Block.
Wenn Du `input` aufrufst, mußt Du den Rückgabewert irgendeiner Variable zuweisen und diese mit "N" vergleichen.

Re: Hilfe beim Verständnis if/else

Verfasst: Montag 28. September 2020, 18:17
von Chrisu
Ahhh ... Zack bum! Da ist der Haken :)
Vielen lieben dank, wieder einen Schritt weiter gelernt!

Super wie das funktioniert nun:

Code: Alles auswählen

antwort = input('Funktioniert das System? J/N ... ')
if antwort == 'J':
    print('Dan Fummel nicht dran rum!')
    print('Alles  ist gut ;)')
else:
    antwort2 = input('Bist du dran Schuld J/N ...')
    if antwort2 == 'N':
        print('Dan trifft es dich nicht!')
    else:
        print('Du Idiot!')
        antwort3 = input('Hat es jemand gemerkt? J/N ... ')
        if antwort3 == 'N':
            print('Man wird dich eh nicht finden!')
        else:
            print('Du bist im Arsch!')
            antwort4 = input('Kannst du einem anderem die Schuld zuschieben? J/N ... ')
            if antwort4 == 'N':
                print('Dan bist du wirklich im Arsch!')
            else:
                print('Keine Sorge! Dan ist jemand anders im Arsch')
lg Chris

Re: Hilfe beim Verständnis if/else

Verfasst: Montag 28. September 2020, 19:27
von __blackjack__
@Chrisu: Man nummeriert keine Namen. Ist hier ja auch überhaupt gar nicht notwendig weil eine vorherige Antwort nach dem erfragen einer neuen Antwort nirgends mehr benötigt wird.

Man könnte sich die Namen sogar komplett sparen. Und die Vezweigungen regelmässiger gestalten, also das beispielsweise im ``if`` immer der "Ja"-Fall und im ``else`` imer der "Nein"-Fall behandelt wird. Das wäre der erste Schritt den Verzweigungsbaum aus dem Code heraus zu holen und in eine Datenstruktur zu stecken.

Jede Frage endet mit dem gleichen Suffix "? J/N ... ". Das kann man nutzen um da eine Funktion heraus zu ziehen. Programmierer sind nämlich die gute Art von Faul und mögen keine Wiederholungen von Code oder Daten im Programm. Die Funktion könnte man dann auch so schreiben, das sie den Benutzer so lange Eingaben machen lässt, bis er auch tatsächlich "J" oder "N" eingegeben hat. Und die könnte einen Wahrheitswert liefern, so dass man im ``if`` keinen Vergleich mehr machen muss.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3


def ask_confirmation(prompt):
    #
    # TODO Make sure the user enters "J" or "N".
    #
    return input(f"{prompt} J/N ... ").lower() == "j"


def main():
    #
    # TODO Extract decision tree as data structure.
    #
    if ask_confirmation("Funktioniert das System?"):
        print("Dann Fummel nicht dran rum!")
        print("Alles ist gut.")
    else:
        if ask_confirmation("Bist Du Schuld?"):
            print("Du Idiot!")
            if ask_confirmation("Hat es jemand gemerkt?"):
                print("Du bist am Arsch!")
                if ask_confirmation(
                    "Kannst du einem Anderen die Schuld zuschieben?"
                ):
                    print("Keine Sorge, jemand anderes ist am Arsch!")
                else:
                    print("Dann bist du wirklich am Arsch!")
            else:
                print("Man wird dich nie finden!")
        else:
            print("Dich trifft es nicht!")


if __name__ == "__main__":
    main()