Python - 如何使此块中的变量全局化?

时间:2011-12-30 01:04:39

标签: python random global-variables global

[Python]我需要将前3个变量(攻击,生命值,金钱)全局化,但我不知道如何因为它们是随机的(random.randint)。有人能告诉我代码应该是什么吗?谢谢!

编辑:我的错误类似于“在分配之前引用的本地变量'money'”在脚本后面。

以下是完整脚本的链接:http://dl.dropbox.com/u/55052881/fightprogram.txt

很抱歉,如果真的很草率,我一周前就开始学习python了。

while roll == 1:

    attack = random.randint(1, 100)
    hitpoints = random.randint(1, 500)   
    money = random.randint(1, 1000)

    attackstr = str(attack)              
    hitpointsstr = str(hitpoints)
    moneystr = str(money)

    print()
    print('Your attack level is ' + attackstr + '.')
    print('You have ' + hitpointsstr + ' hitpoints.')
    print('Your have ' + moneystr + ' coins.')

    print()
    print('Type 1 to reroll.')
    print('Type 2 to proceed.')
    reroll = input()
    reroll = int(reroll)
    if reroll == 2:
        break

4 个答案:

答案 0 :(得分:2)

我假设您发布的代码在函数内部?如果是,则应该返回值而不是使用全局变量:return attack, hitpoints, money返回具有这三个值的元组。

否则,您可以到全局范围内的变量,方法是使用global语句在函数内定义它:

global attack, hitpoints, money

顺便说一下,阅读工作没有global,修改可变对象也是如此。

答案 1 :(得分:1)

使用具有全局范围的某个初始值初始化它们。

答案 2 :(得分:1)

我认为你误解了变量是全局的意义。我强烈建议您阅读scopes and namespaces上的Python文档,但我会尽力以与您的问题相关的方式进行总结。

“全局变量”是全局命名空间中的变量。每个模块都有一个单独的全局命名空间。除了模块,类和函数是唯一可以创建新范围的东西。您创建的任何新变量都将放在最里面的范围内。

有一个global keyword,可用于引用全局变量,但只有在分配全局变量时才需要这样做,例如:

x = 5
def foo():
    x = 10
def bar():
    global x
    x = 20

>>> x      # global variable x
5
>>> foo()  # foo creates a new x in the local scope
>>> x      # global x is unchanged
5
>>> bar()  # bar uses global keyword to reference the global x
>>> x      # global x is now 20
20

在您的隔离代码示例中,attackhitpointsmoney已经是全局变量,因为它们不在任何其他范围内,并且它们将在每次运行时修改环。如果您的代码实际上是在类或函数中,那么将行global attack, hitpoints, money添加到该范围的顶部将导致在模块的全局命名空间中设置这些变量。

答案 3 :(得分:0)

顺便说一句,您不需要attackstr = str(attack)

Python内置字符串扩展,如下所示:print('Your attack level is %s.' % attack)