2012-12-02 63 views
3

我想知道如何在赋值之前使用if语句来更改它。这个脚本的目的是在提示问题从桌面上拿下之前检查刀是否被拿走。这是为了让你可以走回桌子,如果你已经采取了另一种回应。我究竟做错了什么?根据变量更改响应

def table(): 
    if knife_taken == False: 
     print "it's an old, brown wooden table, and atop it you find a knife" 
     print "Will you take the knife or go back?" 
     knife = raw_input ("> ") 
     if knife.strip().lower() in ["back", "b", "no"]: 
      basement2() 
     elif knife.strip().lower() in ["take knife", "knife", "yes", "k"]: 
      knife_taken = True 
      print "You now have the knife, good, you are going to need it" 
      raw_input() 
      basement2() 
     else: 
      print "I did not understand that." 
      raw_input() 
      table() 
    else: 
     print "There's nothing on the table" 
    raw_input() 
    basement2() 

回答

5

基本上当您更改功能knife_taken的变量,你在local级别更改,这意味着当函数结束的更改将丢失。有两种方法来解决这个问题要么使用global(但多数民众赞成在坏的方式)

global knife_taken 
knife_taken = True 

或者你也可以从功能

return knife_taken 

# later on 
kitchen(knife_taken) 

返回刀的状态,并将其存储在一个变量,稍后作为论据传回厨房

或者作为一个额外的小红利,您可以将游戏状态存储在字典中。随着游戏状态改变,你可以更新字典。

game_state = {} 

game_state['knife_taken'] = False 

def kitchen(): 
    if not game_state['knife_taken']: 
     print "Take the knife!" 
     game_state['knife_taken'] = True 
    else: 
     print "Nothing to see here." 

kitchen() 
kitchen() 
+1

+1为字典! – poke

+1

@poke当你有一个友好的动态语言时,生活变得有趣 –

+0

谢谢!像魅力一样工作! –