Python—如何使该块中的变量成为全局变量?

Python—如何使该块中的变量成为全局变量?,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(

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

编辑:我的错误类似于脚本后面的“分配前引用的局部变量‘money’”

以下是完整脚本的链接:

抱歉,如果它真的太草率了,我一周前才开始学习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

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

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

我假设您发布的代码在函数中?如果是,您应该返回值,而不是使用全局值:
返回攻击、生命值、金钱
返回包含这三个值的元组

否则,您可以通过使用
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