为什么0%5会返回0?

Eri*_*mes -3 python

我正在进行一场乒乓球比赛,我希望球能够每5次点击一次加速,但是当我跑出球时,他的起跑方向开始加速.

它运行良好,没有加速球,所以问题不是以前的代码.

当我试图实现这个时,我在我的Ball类中调用了一个变量,self.num_hits最初使它成为0.然后在我的游戏循环中每次碰撞时,我都会增加ball.num_hits并反转它的x_speed.

collide_list = pygame.sprite.spritecollide(ball, players, False)
if collide_list != []:
    ball.x_speed *= -1
    hit.play()
    ball.num_hits += 1
Run Code Online (Sandbox Code Playgroud)

在Ball()类中:

if self.num_hits % 5 == 0:
        if self.x_speed > 0:
            self.x_speed += 2
        else:
            self.x_speed -= 2
Run Code Online (Sandbox Code Playgroud)

但是这使得球的速度以其起始速度关闭,所以我检查了self.num_hits % 5返回的内容,它总是返回0.我一直认为0 % number = number,所以我的问题是为什么0%5会返回0?如果我不能解决0%5的问题,还有其他方法可以让球每5次点​​击一次加速吗?

che*_*ner 11

定义分区以使以下内容始终为真

n = q × d + r

哪里

  • n是分子(或被除数),
  • d!= 0是分母(或除数),
  • q是商,和
  • r > 0是余数.

(这适用于正值和负值; 如果n和d具有相同的符号,则q为正,否则为负.r被定义为始终为正.)

在Python中,n/d == q和n % d == r.如果n为0,那么q也必须为0,在这种情况下也r必须为0 - 所有都独立于的值d.

(偏离主题,但请注意,这也通过除以0来捕获问题:对于非零d,q和r是唯一确定的;对于d = 0,q的任何值将满足r = n的等式.