将范围值转换为整数
我正在pygame中开发一款游戏,其中敌方船只将从屏幕开始,然后沿着Y轴向玩家垂直移动。将范围值转换为整数
但是,我在访问敌人的位置时遇到了一些麻烦,因为它都是相对于一个范围。我不完全不太清楚如何解释,但这里是我的敌人类:
class EnemyActive(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
enemy_img_list = ['enemyshipone.png', 'enemyshiptwo.png',
'enemyshipthree.png','enemyshipfour.png']
enemy_img = random.choice(enemy_img_list)
self.image = pygame.image.load(enemy_img)
self.rect = self.image.get_rect()
self.rect.x = random.randrange(0,400)
self.rect.y = random.randrange(-200,-10)
self.speed = random.randrange(1,3)
def update(self):
self.rect.y += self.speed
def getCoord(self):
return (self.rect.x, self.rect.y)
所以,当我尝试访问使用其他功能的位置,这需要在(X, y)坐标:
particle_list = particles.create_particles(particle_list,enemy.getCoord())
它回来与一个错误,说明:
号码=范围(-5,-1)+范围(1,5)
TypeError:不支持的操作数类型+:'范围'和'范围'
我不会说谎,并说我完全理解错误,但我确实看到逻辑背后的推理。我怎样才能让我的'getCoord'函数发送适当的坐标?
在Python 3中,range
是一个懒惰的序列,而不是一个列表。也就是说,当被要求时,它会像生成器一样每次产生一个值(懒惰),而不是立即将它们全部存储在内存中(eageR)。
您不能将范围一起添加,因为它们没有+定义的方法。 list
确实:它连接在一起。
我们可以通过调用列表类来将范围转换为列表。 I.e,list(range(1, 5))
。
您可以构建两个列表,然后用+连接它们,也可以将这些生成器链接在一起,然后创建一个列表。这被认为是更好的风格,因为它避免了创建中间列表。
如:
from itertools import chain
my_list = list(chain(range(-5, -1), range(1, 5)))
实际上,范围对象不是生成器,而是不可变的序列。答案的其余部分看起来不错。 – skrx
你是对的。当我回到我的电脑时,我会编辑我的答案。 –
如果您正在使用Python 3,在这里看到:http://stackoverflow.com/questions/13318083/python-unsupported-types-range-and-range – Gabriel
你能发布整个堆栈跟踪,所以我们不必猜测会发生什么? – tdelaney
您的代码是否实现该行?你想要它做什么?在Python 2中,'range'返回一个列表,并且它们会连接而没有错误。在python 3上,你可以'numbers = list(range(-5,-1))+ list(range(1,5))''。 – tdelaney