首页 文章

将范围值转换为整数

提问于
浏览
0

我正在开发一个游戏,在游戏中敌人的船只将从屏幕开始,然后在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())

它返回时显示错误:

numbers = range(-5, -1) + range(1, 5)

TypeError: unsupported operand type(s) for +: 'range' and 'range'

我不会撒谎并且说我完全理解错误,但我确实看到了推理背后的逻辑 . 我怎么能真正得到'getCoord'函数来发送适当的坐标?

1 回答

  • 2

    在python 3中, range 是一个惰性序列,而不是列表 . 也就是说,当它被要求时,它像生成器一样一次生成一个值(懒惰),而不是一次将它们全部存储在内存中(eageR) .

    您可以't add ranges together because they don' t具有已定义的方法 . list 确实:它连接起来 .

    我们可以通过调用列表类来将范围转换为列表 . 即, list(range(1, 5)) .

    您可以构建两个列表,然后将它们连接起来,也可以将生成器链接在一起,然后创建一个列表 . 这被认为是更好的样式,因为它避免了创建中间列表 .

    例如:

    from itertools import chain
    my_list = list(chain(range(-5, -1), range(1, 5)))
    

相关问题