kostenloser Webspace werbefrei: lima-city


Fehler bei if-elif-else in Python

lima-cityForumProgrammiersprachenPython

  1. Autor dieses Themas

    mehralsnurradio

    mehralsnurradio hat kostenlosen Webspace.

    Hallo Leute. Ich benutze seit neuestem Python, auf verschiedenen Geräten, Windows 10 und Android (SoloLearn Codelab).
    Ich wollte nun ein Skript (oder wie man das nennt) schreiben. Das fragt einen, wie es einem geht und wertet das dann mit weiteren Fragen und Antworten aus. Hier ist es:
    pi = input ("Wie gehts dir? : ")
    print ("Dir gehts: " + pi)
    print ("Ok, danke, wir wissen jetzt, dass es dir " + pi + " geht.")
    print ("Jetzt kommt ein neues Programm, wir werten deine Antwort aus.")
    print ("...")
    if pi == 'Schlecht' or 'Nicht gut' or 'Nicht so gut':
        print ("Oh nein, es geht dir nicht gut. Was hast du denn?")
        met = input ("Ist dir Übel? Hast du Kopfweh? Oder hast du Fieber? Oder etwas anderes?")
        print ("Es tut mir leid, dass du" + met "hast!")
    elif pi == 'Gut' or 'Super' or 'Ok':
        print ("Dir geht es gut. Naja, was soll man da sagen, mach weiter so! :-).")
    else:
        print ("Naja, jetzt weiß ich nicht wie es dir geht oder kann es nicht auswerten.")
        print ("Wenn du willst, mach es nochmal und antworte mit Gut, Super, Ok, nicht so gut, Nicht gut oder schlecht")
        nm = input ("Für noch mal sagst du JA für nicht noch mal sagst du NEIN: ")
        if nm == 'JA' or 'ja' or 'Ja':
            print ("Gut, schließe das Fenster, starte die Datei noch mal und klicke auf RUN!")
        elif nm == 'NEIN' or 'nein' or 'Nein':
            print ("Nein? Na dann, mach weiter mit dem Programm würde ich sagen!")
        else:
            print ("Sorry, keine Ahnung was du wolltest, dann mach halt einfach mit dem Programm weiter oder halt nicht!")
    print("DAS WARS - FORTSETZUNG FOLGT!")

    Naja, er ist noch nicht richtig fertig, eigentlich soll er noch größer werden.
    Aber wenn ich ihn jetzt ausprobiere, egal auf welchem Gerät, wird bei JEDER Eingabe die Option if (das erste mit dem schlecht) ausgeführt.
    Mache ich einen Anfängerfehler? Danke, mehralsnurradio
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. h***********r

    Habe noch etwas mehr gefunden,

    - Zeile 9 fehlt ein + hinter zwischen var und String.
    - Den Input immer in lowercase umwandeln, dann lässt sich damit leichter arbeiten egal wie die Schreibweise ist.

    Ansonsten sind nur die Expressions falsch formuliert.

    Gerade ist das so wie wie: true wenn pi == schlecht , oder true wenn nicht gut, oder true wenn nicht so gut.
    Du möchtest aber so etwas wie: true wenn pi == schlecht oder nicht gut oder nicht so gut.
    Dafür müssen dort klammern gesetzt werden. Das sieht dann ohne deinen ganzen Text in etwa so aus:

    pi = input ("Input:").lower()
    print (">> "+ pi)
    
    if pi == ('schlecht' or 'nicht gut' or 'nicht so gut') :
        print ("Execute in IF")
        met = input ("Input in IF: 1").lower()
    
    elif pi == ('gut' or 'super' or 'ok'):
        print ("Execute in Elif ")
        
    else:
        print ("Execute in Else")
        nm = input ("Ja/Nein ").lower()
        
        if nm == 'ja':
            print (">> ja")
        elif nm == 'nein':
            print (">> nein")
        else:
            print (">> else")
            
    print("Done")


    Beitrag zuletzt geändert: 14.8.2018 22:52:42 von horstexplorer
  4. horstexplorer schrieb:
    - Zeile 9 fehlt ein + hinter zwischen var und String.
    - Den Input immer in lowercase umwandeln, dann lässt sich damit leichter arbeiten egal wie die Schreibweise ist.
    So weit stimme ich horstexplorer zu.
    Die Korrektur der Bedingung stimmt aber leider nicht. Das Beispiel hätte zur Folge, dass immer nur das erste Wort verglichen wird und die anderen werden ignoriert.

    Nochmal auf Anfang, ich nehme die Abfrage von mehralsnurradio:
    if pi == 'Schlecht' or 'Nicht gut' or 'Nicht so gut':
    Das funktioniert so nicht, weil die Syntax von Python nicht wie die deutsche oder englische Grammatik funktioniert. Das "or" kann nur logische Ausdrücke verknüpfen und ein String wie 'Nicht gut' für sich alleine ist kein logischer Ausdruck.

    Richtig wäre es so:
    if pi == 'Schlecht' or pi == 'Nicht gut' or pi == 'Nicht so gut':


    Es gibt noch eine andere Möglichkeit, die ist etwas kürzer und gefällt dir vielleicht besser:
    if pi in ('Schlecht', 'Nicht gut', 'Nicht so gut'):
    Hier erstelle ich aus den drei Begriffen eine Liste und frage anschließend, ob die Benutzereingabe in der Liste enthalten ist.
  5. Autor dieses Themas

    mehralsnurradio

    mehralsnurradio hat kostenlosen Webspace.

    Danke, jetzt funktioniert es einwandfrei!
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!