破坏提示,简单的if语句? (蟒蛇)

时间:2012-06-29 13:14:24

标签: python if-statement

def prompt():
    x = raw_input('Type a command: ')
    return x


def nexus():
    print 'Welcome to the Nexus,', RANK, '. Are you ready to fight?';
    print 'Battle';
    print 'Statistics';
    print 'Shop';
    command = prompt()
    if command == "Statistics" or "Stats" or "Stat":
        Statistics()
    elif command == "Battle" or "Fight":
        Battle()
    elif command == "Shop" or "Buy" or "Trade":
        Shop()
    else:
        print "I can't understand that..."
        rankcheck()

实际上,应该做的是在输入stat时输入Stat功能,输入Battle时输入Battle功能,输入shop时输入shop功能。然而,我实际上遇到了问题(Duh)。当输入任何内容时,它会直接转到Stat函数。我相信这是因为我处理提示的方式。它几乎只看到第一个if语句并呈现它应该的函数。但是,如果我输入Battle,它仍然需要我进行统计。

我对Python很新,我来这里是为了寻求一些建议。这有什么想法?谢谢你提前。

3 个答案:

答案 0 :(得分:7)

条件

command == "Statistics" or "Stats" or "Stat"

始终被视为True。如果Truecommand,则评估为Statistics,或评估为"Stats"。你可能想要

if command in ["Statistics", "Stats", "Stat"]:
    # ...

相反,或更好

command = command.strip().lower()
if command in ["statistics", "stats", "stat"]:

要放松一点。

答案 1 :(得分:3)

"Stats"是一个非零长度的字符串,因此它充当布尔值True。请尝试使用in代替序列:

if command in ("Statistics", "Stats", "Stat"):
    Statistics()
elif command in ("Battle", "Fight"):
    Battle()
elif command in ("Shop", "Buy", "Trade"):
    Shop()
else:
    print "I can't understand that..."
    rankcheck()

答案 2 :(得分:2)

此外,当使用带有和/或语句的简单if时,请确保始终引用要比较的元素。例如,

if command == "Statistics" or "Stats" or "Stat":
        Statistics()

将是

if command == "Statistics" or command == "Stats" or command == "Stat":
        Statistics()

但是,如前所述,最好使用简单的“in”关键字