2013-02-23 50 views
1

所以我无法让这个系统工作,我不能确定我在问正确的问题,但这里是发生了什么,我想发生什么。Python,函数更改值

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

def gainM(): 
    money + 2 
    Stats() 

if money == 1: 
    gainM() 

现在当打印货币时会发生什么情况,即使我将值加2,值仍然是1。 (代码不是我实际程序的副本,而是显示发生了什么的示例。)

+0

'money + 2' does not do anything。无论如何,这两个函数都不能访问'money' - 你应该把它们放在一个类中,或者把'money'作为参数并返回更新后的值。 – 2013-02-23 01:23:18

回答

5

money + 2是无操作的。实际上,你必须分配money一个新值

money = money + 2 
# or 
money += 2 

但后来你会发现你会得到一个错误 - 你不能分配给变量的函数范围之外。您可以使用关键字global

global money 
money += 2 

这将允许您在函数内改变money值。

但是,推荐的方法是通过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 

现在你通过moneyStats功能。

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

感谢您的帮助..我想指出,我本来有钱=钱+2,但我有一个错误,所以我改变了它,但没想到测试是什么我在做什么事情。谢谢。 – 2013-02-23 11:02:20

2

您需要将新值分配给金钱。像这样:

money = money + 2 

或者简写形式:

money += 2 

而且,如果变量是你的功能外,您需要声明它的全球(所以它不会代替创建一个局部变量)

所以你最终获得:

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

编辑:只是为了澄清,我不是说你应该使用全局变量。一般来说,它们是一个糟糕的主意(尽管它们在某些情况下可能有用)。然而,这就是这个特殊的例子需要工作的。然而,有可能你想要的可能是一个具有该类的方法修改的实例变量的类。但是,鉴于您似乎还没有掌握该语言的基础知识,请一步一步采取措施,不要担心您之前无法理解的句子中的任何单词:)

+0

谢谢大家,熵,你可能是对的,我没有掌握基础知识,但是我学习的方式,我喜欢把事情放在一边,我想出一个主意,当我遇到问题时,我学习如何克服它。 – 2013-02-23 09:07:54

+0

这绝对是我迄今发现学习新东西的最佳方式。尽管在某些时候,一旦掌握了基本知识,阅读更多抽象的东西,例如有助于管理代码复杂性的常规设计模式,肯定会有所帮助。祝你好运队友:-) – entropy 2013-02-23 17:03:08