2013-03-13 67 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()