Python 变量不';不要把自己加在以前的数额上

Python 变量不';不要把自己加在以前的数额上,python,python-3.x,Python,Python 3.x,在这段代码中,我试图让你在键入“work”时,得到1到50之间的任意数字,它将自身添加到总余额中(5倍)。但当我这样做时,变量的前一个量重置为新的量 import random balance = 0 def work(balance): earned_money = random.randint(1, 50) balance += earned_money print(balance) for x in range(5): user_input = input(

在这段代码中,我试图让你在键入“work”时,得到1到50之间的任意数字,它将自身添加到总余额中(5倍)。但当我这样做时,变量的前一个量重置为新的量

import random
balance = 0
def work(balance):
    earned_money = random.randint(1, 50)
    balance += earned_money
    print(balance)
for x in range(5):
    user_input = input()
    if user_input == "work":
        work(balance)

我建议你多了解一些

这是工作代码。您需要将其声明为
global

import random

balance = 0

def work():
    global balance
    earned_money = random.randint(1, 50)
    balance += earned_money
    print(balance)

for x in range(5):
    user_input = input()
    if user_input == "work":
        work()

外部平衡变量位于全局范围中,而内部平衡变量位于局部范围中。 如果要使局部范围变量成为全局变量,则需要在函数中使用global关键字

import random
balance = 0

def work():
    global balance   # This makes balance variable global.
    earned_money = random.randint(1, 50)
    balance += earned_money
    print(balance)

for x in range(5):
    user_input = input()
    if user_input == "work":
        work()

尽管
global
关键字解决了您的问题,但根据您询问的对象,全局变量在Python中被认为是不好的做法。我尽量避免它们,除非绝对没有其他方法,在这种情况下,很容易找到不需要全局变量的解决方案:

随机导入
余额=0
def工作(平衡):
挣得的钱=random.randint(1,50)
返回余额+挣到的钱
对于范围(5)内的x:
用户输入=输入()
如果用户输入=“工作”:
平衡=工作(平衡)
打印(余额)

函数中的
balance
变量与全局变量不同。您将添加到局部变量,这不会影响全局变量。这是否回答了您的问题?谢谢你的回答。global关键字解决了问题,尽管我尝试了不起作用的代码,但我只需删除
work
括号中的
balance
。使用全局变量虽然可以快速解决问题,但通常是一个坏主意,最终导致代码糟糕、难以测试和容易出错。传递变量并影响其函数输出要好得多,如@fsimonjetz的答案所示。这是正确的方法,而不是使用全局变量。