You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python抛射体程序报错:unsupported operand type(s) for //: 'function' and 'int'

解决Python/Pygame中unsupported operand type(s) for //: 'function' and 'int'错误

错误原因分析

这个错误的核心是:你在对函数对象和整数执行整数除法(//)操作。从你提供的代码来看,问题出在man.width或man.height中的一个(或两个)——它们被定义成了类的方法(函数),而非实例属性,但你在代码里直接把它们当作整数属性来调用了。

举个例子,如果man所属类的定义是这样的:

class Player:
    def width(self):
        return 60
    def height(self):
        return 80

那man.width就是一个函数对象,不是整数,和2做//运算自然会触发错误。

另外你的代码存在缩进逻辑bug:if len(fireBalls) <5:的缩进层级错误,它目前属于else块内部,导致只有角色朝右时才会检查火球数量,不符合发射逻辑,需要修正。

修复步骤

  1. 修正属性/方法调用方式
    找到man所属类的定义:

    • 如果width和height是实例属性(在__init__里初始化,比如self.width = 60),确认没有误将它们写成方法;
    • 如果它们是动态计算尺寸的方法,那在代码里要加括号调用,获取返回的整数值:
      fireBalls.append(Projectile(
          round(man.x + man.width() // 2),
          round(man.y + man.height() // 2),
          6,
          (0,0,0),
          facing
      ))
      
  2. 调整代码缩进
    将if len(fireBalls) <5:的缩进层级调整到和facing=1同级,确保无论角色朝左还是朝右,只要按下空格且火球数量少于5就发射:

    if keys[pygame.K_SPACE]:
        if man.Left:
            facing = -1
        else:
            facing = 1
        # 修正缩进,让判断逻辑独立于方向分支
        if len(fireBalls) < 5:
            fireBalls.append(Projectile(
                round(man.x + man.width // 2),  # 或 man.width() //2,根据实际定义调整
                round(man.y + man.height // 2), # 同理调整此处
                6,
                (0,0,0),
                facing
            ))
    

内容的提问来源于stack exchange,提问作者General Schorch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:20:28