2012-03-04 38 views
0

我應該如何編寫此代碼才能在「菜單」之間不斷移動。在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()?任何想法歡迎!

編輯:

只是需要把他們在主while循環

回答

0

第一while循環運行,當你輸入「2」,完成。因此,第二個while循環將開始循環。

在第二個while循環中,輸入'1',導致第二個while循環結束(因爲menu.menu現在=='1')。因此,程序結束。

相反,您可能需要一個用於菜單(不是'1'和'2')的值作爲退出狀態。例如,'E'。然後,你可以用下面的更換你的兩個while循環:

while menu.menu != 'E': 
    menu.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'的情況。我將把它作爲完成任務。

+0

我也是剛加入'而1:'來創建一個主循環...當然,出於某種原因,當我看到欺騙環路我忘了,他們需要的是在他們自己的主要一個。:) – beoliver 2012-03-04 01:14:08

0

首先,請在爲您的類和函數命名時保留編碼慣例。

在Python以小寫modules,通常不包含更多的是一個字,如果這樣做,是相隔強調。 (例如datetime

Classes python以大寫字母開頭並且CamelCased多於一個單詞。 (例如,MainClass

functions在Python以小寫並與分離強調(例如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() 
+0

這樣做,只是做我做的,但堅持它一個主while循環之間的區別是什麼?我會盡全力在未來不會冒犯我命名的人... – beoliver 2012-03-04 01:30:07