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()
4

1 回答 1

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()
于 2012-12-02T16:53:08.473 回答