文本游戏 - 道德追踪者/全球变量 - Python

时间:2014-04-09 17:12:05

标签: python global

我的代码在githib上传到这里:

https://github.com/GameWylder/MonolithGame/blob/Alpha/QfS%200.1.2a.py

所以,我尝试做的是使用全局变量来跟踪道德"。

现在,它不是真正的道德选择,但我想用它来追踪玩家的选择。

我基本上有这个设置:

morality = 0

def pick():
    while True:
        choice = input("")
        if choice == "Hesitate":
            hesitate() #hesitate() is defined already, i just didn't include it to save space.
            morality = 1
            break
        elif choice == "Walk":
            walk() #again, walk() is previously defined.
            morality = 2
            break
        else:
            print("Invalid Input")
#+#+#+#+#+#+#+#+#+#+#+#+#+#
#Clean Up
#+#+#+#+#+#+#+#+#+#+#+#+#+#

pick()
print(morality) #This is to see if the morality worked.
可悲的是,它没有用。我该如何正确设置呢?

(我的设置是这样;第一个选择将设置第一个数字,1或2,然后第二个选择将第一个小数设置为#。1或#。2,然后第三个将设置#。#1或#。#2等等。)

我的意思是"它不起作用"是这个

>>>What's your choice?
Walk
>>>
>>>You Walk
>>>0

应该是什么时候

>>>What's your choice?
walk
>>>
>>>You Walk
>>>2

2 个答案:

答案 0 :(得分:2)

当您对函数中的变量名执行赋值时,除非使用global statement,否则它将创建局部变量。尝试将以下行添加到pick函数的顶部:

global morality

或者更好的是,只需让您的pick函数返回道德值,然后当您拨打电话时使用morality = pick()

有关global声明的更全面说明,请参阅此博文:
http://freepythontips.wordpress.com/2013/07/28/the-use-of-return-and-global-keywords/

答案 1 :(得分:2)

为了简化您的问题,请查看以下代码:

morality = 0
def foo():
    morality = 99
    print "in foo:", morality

print "morality before foo:", morality
foo()
print "morality after foo:", morality

产生输出:

morality before foo: 0
in foo: 99
morality after foo: 0

现在尝试使用此版本的foo()

def foo():
    global morality
    morality = 99
    print "in foo:", morality

我认为同样的问题适用于您的代码。