2013-03-13 73 views
-2

以下是我遇到的基本想法:我試圖做一個簡單的遊戲,你在一個房間裏,而你有兩個房間分支第一個需要在繼續之前「完成」。我希望第二和第三房間將我原來的True報表更改爲False報表,在進行遊戲前需要切換所有報表。如何使函數改變其他函數的True/False語句

從SYS進口出口

def room_1(): 
    print "You're in room one, there are two doors to room 2 and 3." 
    print "Where do you want to go?" 

    done_2=True 
    done_3=True 

    while True: 
     move=raw_input("'room 2' or 'room 3'? >") 

     if move == 'room 2': 
      room_2() 
     elif move == 'room 3': 
      room_3() 
     else: 
      print "not a valid answer" 
    print "You Win!" 
    exit(0) 

def room_2(): 
    print "You finished room 2!" 
    done_1=False 
    raw_input('Press button') 
    room_1() 

def room_3(): 
    print "You finished room 3!" 
    raw_input('press button') 
    done_3=False 
    room_1() 

room_1() 

如何改變done_口供室2和3中? 〜

+1

避免'while while'。 http://stackoverflow.com/a/4557326/59087 – 2013-03-13 16:29:24

+0

您可以從'room_2()'或'room_3()'返回一個值,並將此返回值用作'done_2'或'done_3'變量的值。但是看起來你應該回顧一下軟件架構,以及函數和對象可能有哪些可能的事情。 – bdesham 2013-03-13 16:30:23

+0

如果是我,我會創建一個類來存儲您的done_變量,然後在所有房間函數之間傳遞一個實例。這樣你可以從任何地方編輯它們,因爲它們都只是對實例的引用。 – 2013-03-13 16:31:17

回答

3

在Python中,您必須先聲明全局變量,然後才能分配給它們;否則,任何賦值都會影響全局變量。

def room_2(): 
    global done_1 # <- right here 
    print "You finished room 2!" 
    done_1=False 
    raw_input('Press button') 
    room_1() 

def room_3(): 
    global done_3 # <- right here 
    print "You finished room 3!" 
    raw_input('press button') 
    done_3=False 
    room_1() 

但是!

這通常是不好的風格,特別是對於這樣一個簡單的情況。這使得更難推理你的功能如何工作,他們改變了什麼,以什麼順序。

根據需要,從函數中返回TrueFalse會容易得多,可讀性也好,而且更簡單。

如果您試圖將您的函數看作具有輸入的「黑盒子」,並保證某些輸出,它通常將有助於避免可能出現的許多令人困惑的錯誤。

0

您需要聲明done_1和done_2作爲全局變量,而不是函數room_1()

相關問題