IF语句由ELSE语句构成冗余

时间:2018-04-19 09:52:02

标签: python if-statement

我已经开始了我的游戏初稿(这个草案的重点在于代码的复杂性,所以请不要深入研究如何压缩代码或提高代码效率,那将来更晚),其中一部分是在游戏的每个位置都有角色,但我希望这是随机的。我已经在我的位置函数中添加了一些IF语句,因此它会告诉您房间中的哪个角色,然后将该角色分配给我称为标识符的变量,以便游戏让您与该角色对话。然而,如果该位置没有人,那么没有人可以交谈,所以它最后需要一个ELSE语句,但如果我添加一个ELSE语句,由于某种原因我无法解决或找到它,使所有的IF语句完全冗余,并使其无论如何,它总是会说没有人可以与之交谈。如果我删除此ELSE语句,那么如果您尝试在没有字符的位置进行通话,游戏将会崩溃。我该如何解决?? 非常感谢提前

1 个答案:

答案 0 :(得分:2)

else子句仅适用于最后if,并且在未满足if条件时执行

if body == "Atrium":
    print("Brad's dead body lies in the middle of the floor")
    identifier = ei
else:
    identifier = ei

在此代码段中,else会在body != "Atrium"执行时执行 - 确实会加载您之前的所有if条款。

解决方案: elif

if murderer.location == "Atrium":
    print(murderer.name, "is stood in here, waiting")
    identifier = murderer
elif innocent1.location == "Atrium":
    print(innocent1.name, "is stood in here, waiting")
    identifier = innocent1
...
else:
    identifier = ei

另一种方法是将identifier设置为默认值,只有在条件满足时才会在if子句中覆盖它。只有在比较中没有使用identifier值时,这才有效。

identifier = ei
if murderer.location == "Atrium":
...

此外,正如@Mitch Wheat所述,您应该真正阅读lists and arrays。检查所有列表成员是非常容易和清晰的(特别是如果您以后需要添加另一个无辜的人)

for innocent in innocents:
    if innocent.location == 'Atrium':
        print(innocent.name, "is stood in here, waiting")
        identifier = innocent