为什么在elif行中收到无效的语法错误?

时间:2020-02-07 16:00:05

标签: python

有人可以告诉我为什么我在这里收到无效的语法错误(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()

3 个答案:

答案 0 :(得分:1)

第一个问题是缩进。 elifelse必须与它们各自的if对齐。此外,在else之后,需要一个:,其结果在下面的行中。在这里,我更改了代码以使其起作用:

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 :(得分:0)

问题的根源是else语句不完整。您缺少冒号(:)来结束if-elif-else语句的条件部分。由于else语句是包罗万象的条件,因此您只需要在else语句后立即放置一个冒号即可。因此,如果您选择单行代码,我不推荐这样做,因为它会稍微降低代码的可读性,那么您可以执行以下操作:

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

第二,条件的写法不正确,因为它将始终评估为True。这是因为相等运算符是二进制运算符,并且表达式的右侧可以作为两个单独的表达式读取。这是一个快速演示:

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

这是因为条件的结果将始终输出“ yes”,而Python布尔值对于非空字符串将始终输出True:

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

至少,您应该在比较操作的右侧加上括号,以便可以评估整个右侧。

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

另一方面,如果未在if-else语句之前声明b,则可能会导致for循环出现问题。这将提示错误,提示您在声明变量之前使用了变量。为了使其正常工作,您需要确保在所有条件下都声明b。所以我会做这样的事情。

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

答案 2 :(得分:0)

您需要完成or语句。 Python不会保留a ==之前的部分中的or,因此您在or之后编写的部分基本上是在说“是”,这显然没有意义。要更正它,您需要将if a == "Yes" or "yes":更改为if a == "Yes" or a == "yes":,并使用elif语句进行同样的操作。

此外,请确保您不要在if语句中留下缩进,因为它将elif和else语句放在if触发之后发生的事情上。确保它们与if语句一致。另外,请记住else语句与if / elif语句类似,因为您需要用冒号关闭该语句,然后将要发生的事情缩进-else:,然后下一行。

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

我希望这是有道理的,因为我不经常回答问题,但是我会尽可能地提供帮助。