[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
答案 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
在您的隔离代码示例中,attack
,hitpoints
和money
已经是全局变量,因为它们不在任何其他范围内,并且它们将在每次运行时修改环。如果您的代码实际上是在类或函数中,那么将行global attack, hitpoints, money
添加到该范围的顶部将导致在模块的全局命名空间中设置这些变量。
答案 3 :(得分:0)
顺便说一句,您不需要attackstr = str(attack)
Python内置字符串扩展,如下所示:print('Your attack level is %s.' % attack)