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ステートメントのみが表示され、関数が適切にレンダリングされます。ただし、「バトル」と入力すると、統計情報が表示されます。

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"はゼロ以外の長さの文字列であるため、 boolean として機能し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

また、単純な if を and/or ステートメントで使用する場合は、常に比較対象の要素を参照するようにしてください。例えば、

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 に答える