为什么它有两个不同的结果与相同的“输入”

时间:2011-07-15 13:34:47

标签: python algorithm object

我不明白为什么它有两个不同的结果。请帮助我解释这些结果。

这是我的代码:

# coding: iso-8859-2

class Satelite:
    def __init__(self, name, mass=100, speed=0):
        self.name, self.mass, self.speed= name, mass, speed

    def lokes(self, power, time):
        self.speed=self.speed+ power*time/ self.mass

    def energy(self):
        return self.mass* self.speed**2/2

    def out_speed(self):
        print "%s Satelites's speed = %s m/s" %(self.name, self.speed)

# Tesztprogram:

s1=Muhold('Zoe', mass=250, speed=10)

s1.lokes(500,15)
s1.out_speed()
print s1.energy()

s1.lokes(500,15)
s1.out_speed()
print s1.energy()

结果如下:

Zoe Satelite speed= 40 m/s
200000
Zoe Satelite speed= 70 m/s
612500

3 个答案:

答案 0 :(得分:4)

lokes()方法会改变对象,这意味着每次都有相同的输入。

答案 1 :(得分:3)

那是因为你正在修改中间的状态变量。

def lokes(self, power, time):
    # this reassigns speed, so next time the function is called, 
    # it will be higher.
    self.speed=self.speed+ power*time/ self.mass

由于speed已更改且energy方法取决于speed,因此每次调用除{{1}以外的值的lokes时,energy的输出都应更改1}}。

答案 2 :(得分:1)

您收到的结果不同,因为您在self.speed

的来电之间没有重置s1.lokes(500,15)
def lokes(self, power, time):
    self.speed=self.speed+ power*time/ self.mass

由于lokes的执行会修改并使用self.speed,否则会影响以后的通话,除非您手动设置self.speed或重置卫星。