我该如何写这个,以便我可以不断地在“菜单”之间移动。
#!/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()
?欢迎任何想法!
编辑:
只需要将它们放在主循环中
答案 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
)
Classes
以大写字母开头, CamelCased 为多个单词。 (例如MainClass
)
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()