Python,函数改变值

Python,函数改变值,python,Python,所以我很难让这个系统工作,我不能确定我问的是正确的问题,但这里是正在发生的事情和我想要发生的事情 money = 1 def Stats(): print print "money " + str(money) def gainM(): money + 2 Stats() if money == 1: gainM() 现在,当它用于印刷货币时,值仍然是1,即使我在值上加2。(代码不是我的实际程序的副本,而是一个显示正在发生什么的示例。)您需

所以我很难让这个系统工作,我不能确定我问的是正确的问题,但这里是正在发生的事情和我想要发生的事情

money = 1
def Stats():
     print
     print "money " + str(money)

def gainM():
     money + 2
     Stats()

if money == 1:
     gainM()

现在,当它用于印刷货币时,值仍然是1,即使我在值上加2。(代码不是我的实际程序的副本,而是一个显示正在发生什么的示例。)

您需要将新值分配给货币。像这样:

money = money + 2
或速记形式:

money += 2
此外,如果变量在函数外部,则需要将其声明为全局变量(这样它就不会创建局部变量)

因此,你最终会:

def gainM():
    global money
    money += 2
    Stats()

编辑:只是澄清一下,我不是说你应该使用全局变量。一般来说,它们是一个坏主意(尽管它们在某些情况下可能有用)。然而,这正是这个特定示例需要解决的问题。然而,很可能您想要的是一个具有实例变量的类,该类的方法可以修改该实例变量。然而,考虑到你似乎还没有掌握这门语言的基本知识,一步一步地去做,不要担心我前面的句子中你现在还不懂的任何单词:)

你需要给钱赋予新的价值。像这样:

money = money + 2
或速记形式:

money += 2
此外,如果变量在函数外部,则需要将其声明为全局变量(这样它就不会创建局部变量)

因此,你最终会:

def gainM():
    global money
    money += 2
    Stats()

编辑:只是澄清一下,我不是说你应该使用全局变量。一般来说,它们是一个坏主意(尽管它们在某些情况下可能有用)。然而,这正是这个特定示例需要解决的问题。然而,很可能您想要的是一个具有实例变量的类,该类的方法可以修改该实例变量。然而,考虑到你似乎还没有掌握语言的基本知识,一步一个脚印,不要担心我前面的句子中你现在还不懂的任何单词:)

money+2
是不可行的。你实际上必须将
money
赋值给一个新值

money = money + 2
# or
money += 2
但是你会发现你得到了一个错误-你不能分配给函数范围之外的变量。您可以使用
global
关键字:

global money
money += 2
这将允许您在函数中更改
money
的值

def gainM(money):
    money += 2
    Stats(money)
    return money
但是,推荐的方法是将
金钱作为参数传递:

def gainM(money):
    money += 2
    Stats()
    return money

if money == 1:
    money = gainM(money)
如果使用第二个选项(应该是),还需要更改
Stats
函数,以获得
money
参数

def Stats(money):
     print
     print "money " + str(money)
否则,该函数将打印
1
,而不是
3

另一个建议是使用字符串格式

'money %d' % money  # the old way
'money {}'.format(money)  # the new and recommended way
现在将
money
传递到
Stats
函数中

def gainM(money):
    money += 2
    Stats(money)
    return money

money+2
是不可操作的。实际上,您必须将
money
分配给一个新值

money = money + 2
# or
money += 2
但是你会发现你得到了一个错误-你不能分配给函数范围之外的变量。您可以使用
global
关键字:

global money
money += 2
这将允许您在函数中更改
money
的值

def gainM(money):
    money += 2
    Stats(money)
    return money
但是,推荐的方法是将
金钱作为参数传递:

def gainM(money):
    money += 2
    Stats()
    return money

if money == 1:
    money = gainM(money)
如果使用第二个选项(应该是),还需要更改
Stats
函数,以获得
money
参数

def Stats(money):
     print
     print "money " + str(money)
否则,该函数将打印
1
,而不是
3

另一个建议是使用字符串格式

'money %d' % money  # the old way
'money {}'.format(money)  # the new and recommended way
现在将
money
传递到
Stats
函数中

def gainM(money):
    money += 2
    Stats(money)
    return money

money+2
没有任何作用。在任何情况下,这两个函数都无权访问
money
——您应该将它们放入一个类中,或者将
money
作为参数传递,并返回更新后的值。
money+2
不起任何作用。在任何情况下,这两个函数都不能访问
money
-你应该将它们放在一个类中,或者将
money
作为参数传递,并返回更新的值。谢谢大家,熵,你可能是对的,我还没有掌握基本知识,但就我的学习方式而言,我喜欢随大流,我想出了一个主意,当我遇到问题时,我学会了如何克服它。这绝对是迄今为止我发现的学习新东西的最好方法。虽然在某种程度上,一旦你掌握了基本知识,阅读更多抽象的东西,比如帮助管理代码复杂性的通用设计模式,肯定会有所帮助。祝你好运,朋友:-)谢谢大家,熵,你可能是对的,我还没有掌握基本的知识,但从我的学习方式来看,我喜欢从容不迫,我想出了一个主意,当我遇到问题时,我学会了如何克服它。这绝对是迄今为止我发现的学习新东西的最好方法。虽然在某种程度上,一旦你掌握了基本知识,阅读更多抽象的东西,比如帮助管理代码复杂性的通用设计模式,肯定会有所帮助。祝你好运,伙计:-)谢谢你的帮助。。我想指出的是,我最初的测试结果是money=money+2,但我有一个错误,所以我修改了它,但没有考虑测试我所做的是否真的做了什么。谢谢你的帮助。。我想指出的是,我最初的测试结果是money=money+2,但我有一个错误,所以我修改了它,但没有考虑测试我所做的是否真的做了什么。谢谢