Python—如何使该块中的变量成为全局变量?
[Python]我需要将前3个变量(攻击、生命值、金钱)设置为全局变量,但我不知道如何设置,因为它们是随机的(random.randint)。有人能告诉我代码应该是什么吗?谢谢 编辑:我的错误类似于脚本后面的“分配前引用的局部变量‘money’” 以下是完整脚本的链接: 抱歉,如果它真的太草率了,我一周前才开始学习pythonPython—如何使该块中的变量成为全局变量?,python,random,global-variables,global,Python,Random,Global Variables,Global,[Python]我需要将前3个变量(攻击、生命值、金钱)设置为全局变量,但我不知道如何设置,因为它们是随机的(random.randint)。有人能告诉我代码应该是什么吗?谢谢 编辑:我的错误类似于脚本后面的“分配前引用的局部变量‘money’” 以下是完整脚本的链接: 抱歉,如果它真的太草率了,我一周前才开始学习python while roll == 1: attack = random.randint(1, 100) hitpoints = random.randint(
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
使用具有全局作用域的某个初始值初始化它们。使用具有全局作用域的某个初始值初始化它们。我假设您发布的代码在函数中?如果是,您应该返回值,而不是使用全局值:
返回攻击、生命值、金钱
返回包含这三个值的元组
否则,您可以通过使用global
语句在函数中定义变量来写入全局范围内的变量:
global attack, hitpoints, money
顺便说一句,阅读不需要全局,修改可变对象也是如此。我假设您发布的代码在函数中?如果是,您应该返回值,而不是使用全局值:
返回攻击、生命值、金钱
返回包含这三个值的元组
否则,您可以通过使用global
语句在函数中定义变量来写入全局范围内的变量:
global attack, hitpoints, money
顺便说一句,阅读没有全局性,修改可变对象也没有全局性。我想你误解了变量的全局性意味着什么。我强烈建议您阅读关于的Python文档,但我将尽最大努力以与您的问题相关的方式进行总结 “全局变量”是全局命名空间中的变量。每个模块都有一个单独的全局名称空间。除了模块之外,类和函数是唯一可以创建新作用域的东西。您创建的任何新变量都将放置在最内部的范围中 有一个,可用于引用全局变量,但这仅在分配给全局变量时才有必要,例如:
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
已经是全局变量,因为它们不在任何其他范围内,并且它们将在循环的每次运行中被修改。如果您的代码实际位于类或函数中,那么将行全局攻击、生命点、金钱
添加到该范围的顶部将导致在模块的全局命名空间中设置这些变量。我认为您误解了变量的全局含义。我强烈建议您阅读关于的Python文档,但我将尽最大努力以与您的问题相关的方式进行总结
“全局变量”是全局命名空间中的变量。每个模块都有一个单独的全局名称空间。除了模块之外,类和函数是唯一可以创建新作用域的东西。您创建的任何新变量都将放置在最内部的范围中
有一个,可用于引用全局变量,但这仅在分配给全局变量时才有必要,例如:
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
已经是全局变量,因为它们不在任何其他范围内,并且它们将在循环的每次运行中被修改。如果您的代码实际上在一个类或函数中,那么在该范围的顶部添加行全局攻击、生命值、金钱将导致在模块的全局命名空间中设置这些变量。顺便说一句,您不需要攻击str=str(攻击)
Python内置了字符串扩展,如下所示:print('您的攻击级别是%s.%attack)
顺便说一句,您不需要attackstr=str(attack)
Python内置了字符串扩展,如下所示:print('您的攻击级别是%s.%attack)
您能澄清一下吗?从random.randint
赋值与全局变量有什么关系?另外,这是在脚本的主体中还是在函数中?(在第一种情况下,它们已经是全球性的了……)您能澄清一下吗?从random.randint
赋值与全局变量有什么关系?另外,这是在脚本的主体中还是在函数中?(在第一种情况下,它们已经是全球性的了……)不会有什么不同。在Python中,而
没有引入新的作用域。修复了吗?(更多的字符,让我发布这个)仍然在等待麦迪逊的澄清,因为如果这是所有的代码,变量已经是全局的:DNo,它还没有修复。你想要整个程序的代码吗?它有点长,我应该把它放在注释里吗?不会有什么区别。在Python中,而
没有引入新的作用域。修复了吗?(更多的字符,让我发布这个)仍然在等待麦迪逊的澄清,因为如果这是所有的代码,变量已经是全局的:DNo,它还没有修复。你想要整个程序的代码吗?有点长,我应该把它放在评论里吗?哦,我想我开始明白了。稍后在程序中,我使用变量“money”,但它位于def块中。如果我删除def块并每次只键入它,它会工作吗?谢谢!在我所有的def区块中,我添加了全局攻击、生命值和金钱。它现在工作得很好。非常感谢,这已经困扰了我好几天了!哦,我想我开始明白了。稍后在程序中,我使用变量“money”,但它位于def块中。如果我删除def块并每次只键入它,它会工作吗?谢谢!在我所有的def区块中,我添加了全局攻击、生命值和金钱。它现在工作得很好。非常感谢你,thi