2012-02-28 18 views
1

如何創建一個函數,其中一個變量(出口)確定'while'循環是否運行並且能夠更改它在不同的功能,使第一個功能的while循環將停止如何在一個函數中定義一個變量,並在第一個函數識別它的時候將其變爲另一個函數

while exit == 0: 
     option = (raw_input("What would you like to do? ")) 
     if option == exit: 
      exit() 
    def exit(): 
     exit = 1 

這只是我想要做的一個例子。

當我嘗試運行它時,它不會離開while循環,並且這樣做不會結束程序。我怎樣才能讓while循環識別exit現在是1並離開循環? 對不起,如果問題不是很好,因爲這是我第一次使用stackoverflow問一個問題。

此外:我想知道如何改變函數之間的變量,因爲我會在程序的某些部分做這件事。另外,我要退出之前要保存數據,因此這就是爲什麼我有一個不同的功能

+0

您可以使用模塊範圍中定義的模塊變量,並將其用於不同的功能(以回答您的問題)。退出一個循環有很大的不同,'如果option ==「exit」:exit = 1'就可以實現。 – mitch 2012-02-28 23:32:46

回答

3

您的問題在於範圍 - exit是函數exit()的本地,因此不會影響循環範圍中的變量exit

更好的解決辦法是這樣的:

exit = False 
while not exit: 
    option = raw_input("What would you like to do?") 
    if option == "exit": 
     exit = True 

或者乾脆:

while True: 
    option = raw_input("What would you like to do?") 
    if option == "exit": 
     break 

注意使用TrueFalse10 - 這是更Python,因爲你的意思在這裏是什麼真理值,而不是整數。我也改變了比較字符串"exit",因爲我推測這是你想要的,沒有比較用戶輸入的值爲exit

如果你的問題是你想要有相同的範圍,你可能想讓你的代碼成爲一個類的一部分。

class Doer: #Naturally, give it a real name based on it's purpose. 
    def __init__(self): 
     self.exit = False 
     while not self.exit: 
      option = raw_input("What would you like to do?") 
      if option == "exit": 
       self.exit() 

    def exit(self): 
     self.exit = True 

這裏exit是一個實例變量(因此被從self訪問),並且因此這兩個時間,我們引用相同的變量。

如果你的代碼不是一個更復雜問題的簡化,這是很大的矯枉過正,因爲第一個解決方案會更合適。

1

「退出」就在您的地方電話exit的使用break和扔你exit功能了。

1

第一您的變量和函數不應該有相同的名稱,但這裏的東西,可能會爲你工作:

status = True 
while status: 
    option = (raw_input("What would you like to do? ")) 
    if option == "exit": 
     break 
    elif option == "do_something": 
     status = do_something() 
    elif option == "do_something_and_exit": 
     status = do_something_and_exit() 
    else: 
     print "I don't understand" 

def do_something(): 
    #do something awesome 
    return True 
def do_something(): 
    #do someting awesome 
    return False 
+0

好的,謝謝我不知道那個休息是做的 – udpatil 2012-02-28 23:03:21

1

這種可變看起來有些對象的狀態。爲了使這個對象作爲功能你可以把它贖回

class Ask(object): 
    def __call__(self): 
     self.exit = False 
     while not self.exit: 
      option = (raw_input("What would you like to do? ")) 
      if option == 'exit': 
       break 
    def quit(): 
     self.exit = True 

ask = Ask() 

>>> ask() 
1

簡單的方法從另一個功能改變的變量是返回值,然後在本地進行分配。在你的代碼示例,它看起來像這樣:

while exit == 0: 
    option = (raw_input("What would you like to do? ")) 
    if option == 'exit': 
     exit = set_exit() 

def set_exit(): 
    return 1 
0

好像我有點晚了黨的答案,但這裏是如何使用的關閉和突變(和古老的編程技巧)來做到這一點。

這將在python3中工作(在python2中你可以做同樣的事情,但必須使用一個列表來保存你的變量)。

x = 1 

def mutateX(new): 
    nonlocal x  # you will have to use the 'global' keyword if this function is defined in the body of a module 
    x = new 

print(x) # --> 1 
mutateX(2) 
print(x) # --> 2 

這不是你應該在這種情況下做什麼(只使用break),但它回答你在你的問題的標題提出的問題。

相關問題