在python中的菜单之间交换

时间:2012-03-04 00:59:05

标签: python

我该如何写这个,以便我可以不断地在“菜单”之间移动。

 #!/bin/env python
  import os



class Menu:

    def __init__(self):
        self.menu = '1'

    def Main(self):

        os.system('clear')
        print "main menu"
        test = raw_input()
        if test == '2': 
            self.menu = '2'

    def Sub(self):

        os.system('clear')
        print "sub menu"
        test = raw_input()
        if test == '1': 
            self.menu = '1'


menu = Menu()

while menu.menu == '1':
    menu.Main()

while menu.menu == '2':
    menu.Sub()

此刻我可以换一次。即我从menu.Main()开始,输入'2'并显示menu.Sub()。但是当我输入“1”时程序退出。为什么不回到显示菜单menu.Main()?欢迎任何想法!

编辑:

只需要将它们放在主循环中

2 个答案:

答案 0 :(得分:0)

第一个while循环运行,当你输入'2'时,结束。因此,第二个while循环将开始循环。

在第二个while循环中,输入'1',这会导致第二个while循环结束(因为menu.menu现在=='1')。因此,该计划结束。

相反,您可能希望菜单的一个值(既不是'1'也不是'2')充当退出状态。例如,'E'。然后,您可以使用以下内容替换两个while循环:

while menu.menu != 'E':
    menu.Do()

“Do”方法将处理菜单状态,如果它是1或2。

class Menu:
    def __init__(self):
        self.menu = '1'

    def Do(self):
        if self.menu == '1':
            self.Main()
        elif self.menu == '2':
            self.Sub()

    def Main(self):

        os.system('clear')
        print "main menu"
        test = raw_input()
        if test == '2': 
            self.menu = '2'

    def Sub(self):

        os.system('clear')
        print "sub menu"
        test = raw_input()
        if test == '1': 
            self.menu = '1'

你仍然需要这样做,以便你可以实际进入'E'案例。我会把它作为你完成的任务。

答案 1 :(得分:0)

首先,请在命名类和函数时保留编码约定。

python中的

modules以小写开头,通常不包含多于一个单词,如果它包含下划线。 (例如datetime

python中的

Classes以大写字母开头, CamelCased 为多个单词。 (例如MainClass

python中的

functions以小写字母开头,并以下划线分隔(例如keep_trying

由于您的命名风格,我一直在尝试阅读您的代码并误解了代码。对于同行评审来说这是一种不好的做法,也是对自己不好的做法,因为你很难理解其他代码。

-

对于您的问题,如果您按照工作流程进行操作,则会在致电menu时看到您无法拨打sub,因为if statement仅检查是否为1,而不是2

这是一个更好的方法:

#!/bin/env python
import os



class Menu:

    def __init__(self):
        self.get_input()

    def get_input(self):
        input = raw_input()
        if input == '1':
            self.main()
        elif input == '2':
            self.sub()

    def main(self):   
        os.system('clear')
        print "main menu"
        self.get_input()

    def sub(self):
        os.system('clear')
        print "sub menu"
        self.get_input()


menu = Menu()
相关问题