Python菜单驱动编程

Python menu-driven programming

对于菜单驱动的编程,如何最好地编写Quit函数,以便Quit只在一个响应中终止程序。

这是我的代码,如果可能,请编辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
print("
Menu
(V)iew High Scores
(P)lay Game
(S)et Game Limits
(Q)uit"
)
choose=input(">>>")
choice=choose.lower()
while choice!="q":
    if choice=="v":
        highScore()
        main()
    elif choice=="s":
        setLimit()
        main()
    elif choice=="p":
        game()
        main()
    else:
        print("Invalid choice, please choose again")
        print("
"
)
print("Thank you for playing,",name,end="")
print(".")

当程序第一次执行并按"Q"时,它退出。但在按下另一个函数后,返回主函数并按q,它会重复主函数。谢谢你的帮助。


把菜单和解析放在一个循环中。当用户想要退出时,使用break中断循环。

来源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
name = 'Studboy'
while True:
    print("
Menu
(V)iew High Scores
(P)lay Game
(S)et Game Limits
(Q)uit"
)
    choice = raw_input(">>>").lower().rstrip()
    if choice=="q":
        break
    elif choice=="v":
        highScore()
    elif choice=="s":
        setLimit()
    elif choice=="p":
        game()
    else:
        print("Invalid choice, please choose again
"
)

print("Thank you for playing,",name)
print(".")

在进入循环之前,您只从用户那里获得一次输入。所以如果他们第一次输入q,那么它将退出。但是,如果不这样做,它将继续跟踪输入的内容,因为它不等于q,因此不会脱离循环。

您可以将此代码分解为一个函数:

1
2
3
4
5
6
7
8
print("
Menu
(V)iew High Scores
(P)lay Game
(S)et Game Limits
(Q)uit"
)
choose=input(">>>")
choice=choose.lower()

然后在进入循环之前调用它,然后像循环返回之前循环所做的最后一件事一样调用它。

根据OP的评论进行编辑:

下面的代码实现了我前面提到的factoring out,它的工作方式与我在键入q时所期望的一样。

它在python 2.7(raw_inputinput)中有所改进,并且从print中删除了nameend引用,因此它可以编译(我假设这些引用是在代码的其他地方定义的)。我还定义了类似于game的函数的虚拟版本,以便它编译并反映调用行为,这就是这里要检查的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
def getChoice():
    print("
Menu
(V)iew High Scores
(P)lay Game
(S)et Game Limits
(Q)uit"
)
    choose=raw_input(">>>")
    choice=choose.lower()

    return choice

def game():
    print"game"

def highScore():
    print"highScore"

def main():
    print"main"

def setLimit():
    print"setLimit"


choice = getChoice()

while choice!="q":
    if choice=="v":
        highScore()
        main()
    elif choice=="s":
        setLimit()
        main()
    elif choice=="p":
        game()
        main()
    else:
        print("Invalid choice, please choose again")
        print("
"
)

    choice = getChoice()

print("Thank you for playing,")