Kann mir bitte jemand sagen, warum hier ein ungültiger Syntaxfehler auftritt (Python 3):

a = input("Do you want the alphabets in the pattern in ascending order or descending order? (Yes/No) ")
if a == "Yes" or "yes":
    b = 65
    elif a == "No" or "no":
        b = 88
    else print("Invalid input")
for x in range (5,0,-1):
    for y in range (0,x):
        print(" ", chr(y+b), end = "")
    print()
0
user12859487 7 Feb. 2020 im 19:00

3 Antworten

Beste Antwort

Das erste Problem ist die Einrückung. elif und else müssen an ihren jeweiligen if ausgerichtet sein. Außerdem wird nach dem else ein : und das Ergebnis in der folgenden Zeile erwartet. Hier habe ich Ihren Code geändert, um ihn funktionsfähig zu machen:

a = input("Do you want the alphabets in the pattern in ascending order or descending order? (Yes/No) ")
if a.lower() == 'yes':
    b = 65
elif a.lower() == 'no':
    b = 88
else:
    print("Invalid input")
for x in range (5,0,-1):
    for y in range (0,x):
        print(" ", chr(y+b), end = "")
    print()
1
marc_s 28 Feb. 2020 im 05:23

Sie müssen Ihre or Anweisungen vervollständigen. Python behält das a == nicht aus dem Abschnitt vor dem or bei, daher sagt der Abschnitt, den Sie nach dem or schreiben, im Grunde genommen "Ja", was offensichtlich keinen Sinn ergibt. Um dies zu korrigieren, müssen Sie if a == "Yes" or "yes": in if a == "Yes" or a == "yes": ändern und dasselbe mit Ihrer elif-Anweisung tun.

Stellen Sie außerdem sicher, dass Sie den Einzug nicht aus der if-Anweisung lassen, da dadurch die elif- und else-Anweisungen als etwas gesetzt werden, das nach dem Auslösen des if geschieht. Stellen Sie sicher, dass sie mit der if-Anweisung übereinstimmen. Denken Sie außerdem daran, dass else-Anweisungen wie if / elif-Anweisungen sind, indem Sie die Anweisung mit einem Doppelpunkt schließen und dann unter - else: und dann in die nächste Zeile einrücken müssen, was geschehen soll.

if a == "Yes" or a == "yes":
    b = 88
elif a== "No" or "no":
    b == 88
else:
    print("Invalid input")

Ich hoffe, das macht Sinn, da ich nicht oft Fragen beantworte, aber ich versuche zu helfen, wenn ich kann.

0
Lilwen 7 Feb. 2020 im 16:51

Die Wurzel Ihres Problems ist, dass die else-Anweisung nicht vollständig ist. Ihnen fehlt ein Doppelpunkt (:), um den Bedingungsteil Ihrer if-elif-else-Anweisung zu beenden. Da die else-Anweisung die Catch-All-Bedingung ist, müssen Sie nur sofort einen Doppelpunkt nach der else-Anweisung setzen. Wenn Sie sich also für einen Einzeiler entscheiden, was ich nicht empfehlen würde, da dies die Lesbarkeit Ihres Codes geringfügig beeinträchtigt, können Sie Folgendes tun:

a = input("Do you want the alphabets in the pattern in ascending order or descending order? (Yes/No) ")
if a == "Yes" or "yes":
    b = 65
elif a == "No" or "no":
    b = 88
else: print("Invalid input")

for x in range (5,0,-1):
    for y in range (0,x):
        print(" ", chr(y+b), end = "")
    print()

Zweitens ist die Schreibweise der Bedingungen nicht korrekt, da sie IMMER als wahr ausgewertet wird. Dies liegt daran, dass der Gleichheitsoperator ein binärer Operator ist und die rechte Seite des Ausdrucks als zwei separate Ausdrücke gelesen werden kann. Hier ist eine kurze Demonstration:

>>> a = "No"
>>> a == "Yes" or "yes"
>>> 'yes'

Dies liegt daran, dass das Ergebnis Ihrer Bedingung immer 'yes' ausgibt und Python boolean immer True für eine nicht leere Zeichenfolge ausgibt:

>>> bool(a == "Yes" or "yes")
>>> True

Sie sollten mindestens Klammern um die rechte Seite der Vergleichsoperation setzen, damit die gesamte rechte Seite ausgewertet werden kann.

>>> a == ("Yes" or "yes")
>>> False

Wenn das b nicht vor Ihrer if-else-Anweisung deklariert wird, treten wahrscheinlich Probleme mit Ihrer for-Schleife auf. Es wird ein Fehler ausgegeben, der besagt, dass Sie eine Variable verwenden, bevor sie deklariert wurde. Damit es ordnungsgemäß funktioniert, müssen Sie sicherstellen, dass b unter allen Bedingungen deklariert ist. Also würde ich so etwas machen.

a = input("Do you want the alphabets in the pattern in ascending order or descending order? (Yes/No) ")
if a == "Yes" or "yes":
    b = 65
elif a == "No" or "no":
    b = 88
else: 
    b = 0
    print("Invalid input")

for x in range (5,0,-1):
    for y in range (0,x):
        print(" ", chr(y+b), end = "")
    print()
0
nmctwisp 7 Feb. 2020 im 16:53