Python:为什么变量不更新?

时间:2010-01-06 02:11:47

标签: python variables integer

我正在调试的python程序具有以下代码(包括用于调试的print语句):

print "BEFORE..."
print "oup[\"0\"] = " + str(oup["0"])
print "oup[\"2008\"] = " + str(oup["2008"])
print "oup[\"2009\"] = " + str(oup["2009"])

oup0 = oup["0"]
oup2008 = oup["2008"]
oup2009 = oup["2009"]
ouptotal = oup2008 + oup2009
print "ouptotal = " + str(ouptotal)

if ouptotal > 0:
    oup["2008"] = oup2008 + oup0 * (oup2008 / ouptotal)
    oup["2009"] = oup2009 + oup0 * (oup2009 / ouptotal)

print "AFTER..."
print "oup[\"0\"] = " + str(oup["0"])
print "oup[\"2008\"] = " + str(oup["2008"])
print "oup[\"2009\"] = " + str(oup["2009"])

直到那时,变量才能正确更新。当我运行该代码时,我在屏幕上显示以下内容:

BEFORE...                                                                       
oup["0"] = 22032                                                                
oup["2008"] = 541                                                               
oup["2009"] = 15223                                                             
ouptotal = 15764                                                                
AFTER...                                                                        
oup["0"] = 22032                                                                
oup["2008"] = 541                                                               
oup["2009"] = 15223                                                             

为什么不是oup [“2008”]和oup [“2009”]更新?

(“Jaunty”Ubuntu机器上的Python版本是2.6.2。)

3 个答案:

答案 0 :(得分:6)

如果值是整数,那么(oup2008 / ouptotal)将为零,因此它们将更新为它们自己的值+ 0,因此没有变化。

将它们转换为浮点数进行计算,然后在需要时返回,它应该按预期工作。

示例:

oup["2008"] = oup2008 + int(oup0 * (float(oup2008) / ouptotal))

答案 1 :(得分:3)

整数除法产生整数结果。在其中一个部门术语上使用float()或在顶部添加from __future__ import division

答案 2 :(得分:1)

他们是,你只是用相同的值更新它们。在Python 2.6中,/仍然是整数除法运算符(reference),因此除(oup2008 / ouptotal)除以一个更大的数字,这总是导致零。如果您想要更高版本的行为,/是浮点运算符,您可以使用导入division的未来语句来获取它。