Python自动将整数转换为浮点数

1 投票
2 回答
1431 浏览
提问于 2025-04-16 04:05

我正在学习Python(我用的是2.5.4版本),想通过写一个贪吃蛇游戏来练手,但遇到了一些问题。

有些整数变成了浮点数,而且看起来还会随机变化,至少在我看来是这样的 :)

问题是,Snake.spawnPointCam.move() 修改了。

print Snake.spawnPoint # first time, this returns '[25, 20]' ,which is good.
Cam.Move()
print Snake.spawnPoint # after the method, the value is '[26.0, 21.0]', and that's bad

之后,它们就开始漂移了。

这是这个方法:(和 spawnPoint 没有关系)

def Move(self):
    self.vel[0]+=(self.target[0]-self.cen[0])*self.k
    self.vel[1]+=(self.target[1]-self.cen[1])*self.k
    if    self.vel[0] > self.friction: self.vel[0]-= self.friction
    elif  self.vel[0] < self.friction: self.vel[0]+= self.friction
    else: self.vel[0] = 0
    if    self.vel[1] > self.friction: self.vel[1]-= self.friction
    elif  self.vel[1] < self.friction: self.vel[1]+= self.friction
    else: self.vel[1]=0
    self.cen[0]+=self.vel[0]
    self.cen[1]+=self.vel[1]

spawnPoint 是一个常量,我在蛇生成的时候把它添加到蛇的身体里。我喜欢用列表来表示,因为蛇的身体也是用列表构成的,而渲染方法使用 index() 来处理一些事情。

代码在这里似乎不太合适,所以我把它压缩了。有人能帮我看看吗?谢谢!

http://www.mediafire.com/?zdcx5s93q9hxz4o

2 个回答

1

在Python(和很多其他编程语言中)任何简单的数学运算(比如加、减、乘、除)如果涉及到一个整数和一个浮点数,最后的结果都会变成浮点数。整数本身不会变成浮点数,只有运算的结果会以浮点数的形式返回。

需要注意的是,如果运算只涉及整数,那么结果会以整数的形式返回(这里我用“整数”这个词来指代Python中的intlong)。

4

如果你在一个表达式中把整数结合在一起,比如乘法、加法、减法(不一定是除法),那么这些整数会变成浮点数。很可能你的一些变量是浮点数,比如 self.friction。

浮点数不会自己变回整数,只有通过 int() 这个方法才能转换。如果你看到其他情况,那可能是你观察错了。

看起来你的 Move 方法间接地修改了 "spanwPoint"。我不确定这是否是预期的行为,但这可能意味着你有两个引用指向同一个列表。例如:

self.spawnPoint = [1, 0]
self.vel = self.spawnPoint # Does not make a copy!
self.vel[0] += 0.1
self.vel[1] += 0.2

这样会导致 self.spawnPoint 也变成 [1.1, 0.2]

撰写回答