3

我是 python 新手,正在上课。下面是我的代码。我的问题是在我想要的最后一行,这样如果有人简单地按下回车,它就会被视为有人输入了(1/2/3 或 4)以外的输入,这基本上会用最后一个 elif 回复并重新开始问题. 但目前它给了我这个:

SyntaxError: unexpected EOF while parsing. 

任何人都可以帮忙吗?

def menu_loop():
    ans = True
    while ans:
        print("""
        1. My freedom awaits me, give me my blade!
        2. I've never fought before, might you help me?
        3. I have already forsaken freedom, I will fight till the death.
        4. Fighting is for the wicked. I refuse to fight.

        Press enter to quit
        """)

        ans= input("What would you like to do now?")
        if ans == 1:
            main_loop()
            break
        elif ans == 2:
            instructions_loop()
            break
        elif ans == 3:
            gauntlet_loop()
            break
        elif ans == 4:
            print("\nMen... come relieve this man of his life.")
            time.sleep(2)
            end_game_loop()
            break
        elif ans == '': 
            print("\nDo you not speak Latin, slave?")

谢谢,感谢Christian,我找到了答案。我猜我得到指示的网站是 Python 3,而我是 2(这是为了大学作业)。现在正在运行,非常感谢!

4

3 回答 3

0

如果您使用的是 python 2,则更改:

ans = input("What would you like to do now?")

至:

ans = raw_input("What would you like to do now?")  

raw_input返回一个字符串,而输入返回一个integerthis 在 python 3 中被改变,在 3 中只有input并且它返回一个字符串

因此,如果您使用的是 python 2,请将其更改为raw_input然后调用您的其他条件,如下所示:

if int(ans) == 1:
    main_loop()
    break
于 2013-09-29T22:26:22.773 回答
0

将最后一个 elif 条件更改为elif not ans

def menu_loop():
    ans = True
    while ans:
        print("""
        1. My freedom awaits me, give me my blade!
        2. I've never fought before, might you help me?
        3. I have already forsaken freedom, I will fight till the death.
        4. Fighting is for the wicked. I refuse to fight.

        Press enter to quit
        """)

        ans = input("What would you like to do now?")
        if ans == 1:
            main_loop()
            break
        elif ans == 2:
            instructions_loop()
            break
        elif ans == 3:
            gauntlet_loop()
            break
        elif ans == 4:
            print("\nMen... come relieve this man of his life.")
            time.sleep(2)
            end_game_loop()
            break
        elif not ans: 
            print("\nDo you not speak Latin, slave?")

编辑:答案适用于 python 3。对于 python 2.7,使用 raw_input 而不是 input,并相应地使用 int(ans) 或字符串文字。

于 2013-09-29T22:28:00.143 回答
0

使用raw_input而不是input. input将尝试评估输入,评估空字符串会引发错误。raw_input不评估,只是给你一个字符串。请参阅此说明

def main_loop():
    pass
def instructions_loop():
    pass
def gauntlet_loop():
    pass
def end_game_loop():
    pass

next_loop_func = {
    '1': main_loop, 
    '2': instructions_loop, 
    '3': gauntlet_loop,
    '4': end_game_loop,
}
def menu_loop():
    while True:
        print("""
        1. My freedom awaits me, give me my blade!
        2. I've never fought before, might you help me?
        3. I have already forsaken freedom, I will fight till the death.
        4. Fighting is for the wicked. I refuse to fight.

        Press enter to quit
        """)

        ans = raw_input("What would you like to do now?")
        if ans in next_loop_func:
            next_loop_func[ans]
        else: 
            print("\nDo you not speak Latin, slave?")


menu_loop()
于 2013-09-29T22:32:50.017 回答