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,它会重复主函数。谢谢你的帮助。
把菜单和解析放在一个循环中。当用户想要退出时,使用
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(
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,") |