我正在制作一个子手游戏,想检查“合法人物”。
如果玩家输入了多个符号,则应打印"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"
。
答案 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
),则代码将运行该块,而不评估其余的elif
或else
块。在您给出的简单情况下,您必须像这样重新排列语句:
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)