如何执行第三个elif条件?

时间:2019-05-11 15:25:47

标签: python-3.x if-statement

我正在制作一个子手游戏,想检查“合法人物”。 如果玩家输入了多个符号,则应打印"E1"。 如果他输入了其他内容,则a-z-打印"E2"。 如果他输入了更多符号,则没有一个a-z字母打印"E3" 我无法到达"E3"。为什么会发生这种情况,我在做什么错了?

import string
player_input = input("Guess a letter: ").lower()
aToz = string.ascii_lowercase[0:26]


if len(player_input) != 1:
    print("E1")
elif player_input not in aToz:
    print("E2")
elif player_input not in aToz and len(player_input) != 1:
    print("E3")
else:
    print(player_input)

预期的结果是,当键入多个字母和其他符号时,得到"E3"。实际结果是"E1"

3 个答案:

答案 0 :(得分:0)

错误案例“输入多个符号”比“输入多个符号且没有字母a-z”更为常见。满足E3的条件将始终满足E1的条件。由于您在{strong>之前之前E1定义了更一般的情况,因此您总是得到E3

要解决此问题,可以将E3的条件移至if-else梯形图的顶部,将E1的条件移至底部。

E1

注意:多字符输入的条件if player_input not in aToz and len(player_input) != 1: print("E3") elif len(player_input) != 1: print("E1") elif player_input not in aToz: print("E2") else: print(player_input) 永远不会是player_input not in aToz,因此第二个检查有点多余。

答案 1 :(得分:0)

if / elif语句是按顺序求值的。因此,如果其中一个条件已经满足(在您的情况下是第一个len(player_input) != 1),则代码将运行该块,而不评估其余的elifelse块。在您给出的简单情况下,您必须像这样重新排列语句:

if player_input not in aToz and len(player_input) != 1:
    print("E3")
elif len(player_input) != 1:
    print("E1")
elif player_input not in aToz:
    print("E2")
else:
    print(player_input)

答案 2 :(得分:0)

执行从第一个IF块开始,即,如果有多个字符,它将不检查E3期望值。

之后,它将流到下一个ELIF块,即是否有特殊字符。

如果看到代码覆盖率,它将永远不会到达第三个代码段。

它甚至不是必需的。您的前两个错误检查可以很好地解决此问题。

但是您仍然希望在测试用例中出现该异常,您需要首先检查E3,然后继续进行E1和E2

类似这样的东西:

if player_input not in aToz and len(player_input) != 1:
    print("Error: Multiple characters and Special characters")
elif len(player_input) != 1:
    print("Multiple Characters")
elif player_input not in aToz:
    print("Special Character")
else:
    print(player_input)