如何解决python函数中的变量+= 1错误地加了2
我在一个类中有这个函数 move()
函数,它在包含 self.coords[1] += 1
的行中错误地添加了 2 而不是 1
这是文件:
class Actor():
def __init__(self,start,limits,barriers):
self.coords = start
self.limits = limits
self.barriers = barriers
def canmove(self,direction):
moving = self.coords
if(direction == 'up'):
moving[1] -= 1
elif(direction == 'right'):
moving[0] += 1
elif(direction == 'down'):
moving[1] += 1
elif(direction == 'left'):
moving[0] -= 1
if((moving[0] > self.limits[0]) or (moving[1] > self.limits[1]) or (-1 in moving) or (moving in self.barriers)):
return False
else:
return True
def move(self,direction):
if(direction == 'up'):
if self.canmove('up'):
self.coords[1] -= 1
elif(direction == 'right'):
if self.canmove('right'):
self.coords[0] += 1
elif(direction == 'down'):
if self.canmove('down'):
self.coords[1] += 1
elif(direction == 'left'):
if self.canmove('left'):
self.coords[0] -= 1
我知道 canmove()
函数还不能正常工作,但它不会干扰结果。
当运行 Actor.move('up')
时,它减少了 Actor.coords[1]
两个而不是一个。
会发生以下情况(即使忽略 canmove()
检查):
>>> from actor import Actor
>>> actor = Actor([2,2],[10,5],[[4,4]])
>>> actor.move('down')
>>> actor.coords
[2,4]
和 actor.move(down)
应该将 actor.coords[1]
的值增加一,而不是二。
解决方法
在您的 canmove
函数中,moving = self.coords
实际上并不复制列表,它只是复制对列表在内存中的位置的引用 (here is an explanation for what is going on) .所以 moving
和 self.coords
都指向同一个列表,这导致你的 canmove
函数移动你的角色(然后当 move
函数移动它得到的角色时移动了两次)。你想要做的是:
import copy
moving = copy.deepcopy(self.coords)
这将复制列表和列表中的所有项目。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。