2
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,它仍然需要我进行统计。

4

3 回答 3

7

条件

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

总是考虑True。它要么评估为Trueif commandis Statistics,要么评估为"Stats"。你可能想要

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

相反,或者更好

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

放松一点。

于 2012-06-29T13:16:29.093 回答
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()
于 2012-06-29T13:16:44.897 回答
2

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

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

将会

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

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

于 2012-06-29T13:23:24.897 回答