Python 涉及lambda给定代码的错误<;主要功能。<;本地人>&书信电报;lambda>;在0x00000234D43C68B8处>;

Python 涉及lambda给定代码的错误<;主要功能。<;本地人>&书信电报;lambda>;在0x00000234D43C68B8处>;,python,Python,我正在用python制作一个蛇游戏(使用pygame),但是在绘制尾巴时,出现了错误。地图比屏幕大,所以我创建了一个坐标转换函数(输入游戏坐标和输出屏幕坐标),但当我移动蛇/更新尾部位置列表时,该函数就会中断 我完全不知道发生了什么,所以我不知道该尝试什么 #定义convCoords。将游戏坐标转换为20x20px正方形的屏幕坐标。 def convCoords(mapX、mapY、模式): 屏幕X=((camX-15)-mapX)*-20 屏幕Y=((camY-11)-mapY)*-20 如

我正在用python制作一个蛇游戏(使用pygame),但是在绘制尾巴时,出现了错误。地图比屏幕大,所以我创建了一个坐标转换函数(输入游戏坐标和输出屏幕坐标),但当我移动蛇/更新尾部位置列表时,该函数就会中断

我完全不知道发生了什么,所以我不知道该尝试什么


#定义convCoords。将游戏坐标转换为20x20px正方形的屏幕坐标。
def convCoords(mapX、mapY、模式):
屏幕X=((camX-15)-mapX)*-20
屏幕Y=((camY-11)-mapY)*-20
如果mode=1:#如果mode=1,则同时返回X和Y
返回screenX,screenY
elif mode==2:#如果mode=2,则仅返回X
返回屏幕X
elif mode==3:#如果mode=3,则仅返回Y
返回屏幕
其他:
raise INDEXERR(“将数字1-3用于模式”)#如果将数字1-3以外的数字用作模式,则引发错误
def main():
东西
如果snakeMoveTimer>=速度:
#把尾巴往前移
convCoordsInserterX=lambda:convCoords(camX,0,2)
convCoordsInserterY=lambda:convCoords(0,camY,3)
列表。附加(尾位置,(convCoordsInserterX,
convCoordsInserterY,20,20)
如果不适用:
列表.pop(尾部位置,0)
其他:
appleEaten=False
其他材料()
#画尾巴
对于尾部位置中的对象:
打印(对象)
pygame.draw.rect(游戏显示,绿色,对象)
#增加定时器
蛇行计时器+=1
打印输出(240、220、20、20)(260、220、20、20)(280、220、20、20),直到输出时更新:

(<function main.<locals>.<lambda> at 0x00000234D43C68B8>, <function main.<locals>.<lambda> at 0x00000234D43CB048>, 20, 20)
Traceback (most recent call last):
  File "C:/Users/Me/Python/Snake/snake.py", line 285, in <module>
    main()
  File "C:/Users/Me/Python/Snake/snake.py", line 255, in main
    pygame.draw.rect(gameDisplay, GREEN, object)
TypeError: Rect argument is invalid
(,20,20)
回溯(最近一次呼叫最后一次):
文件“C:/Users/Me/Python/Snake/Snake.py”,第285行,在
main()
文件“C:/Users/Me/Python/Snake/Snake.py”,第255行,在main中
pygame.draw.rect(游戏显示,绿色,对象)
TypeError:Rect参数无效
将lambda附加到

(convCoordsInserterX, convCoordsInserterY, 20, 20)
但是您应该运行lambdas-使用
()
-并附加结果

(convCoordsInserterX(), convCoordsInserterY(), 20, 20)
或者你应该跳过lambdas,把它缩短

(convCoords(camX, 0, 2), convCoords(0, camY, 3), 20, 20)
你把lambdas添加到

(convCoordsInserterX, convCoordsInserterY, 20, 20)
但是您应该运行lambdas-使用
()
-并附加结果

(convCoordsInserterX(), convCoordsInserterY(), 20, 20)
或者你应该跳过lambdas,把它缩短

(convCoords(camX, 0, 2), convCoords(0, camY, 3), 20, 20)

为什么会出人意料?您将这两个lambda显式地附加到列表中(以一种奇怪的方式;使用
foo.append(“bar”)
,而不是
list.append(foo,“bar”)
)。
打印(对象)
打印什么?您的参数是否符合?您将lambda
convCoordsInserterX,convCoordsInserterY
附加到列表中,但您应该使用
()
运行lambdas并附加来自这些lambda
的结果(convCoordsInserterX(),convCoordsInserterY(),20,20)
。或者你应该跳过lambdas-
(convCoords(camX,0,2),convCoords(0,camY,3),20,20)
为什么会出现这种情况?您将这两个lambda显式地附加到列表中(以一种奇怪的方式;使用
foo.append(“bar”)
,而不是
list.append(foo,“bar”)
)。
打印(对象)
打印什么?您的参数是否符合?您将lambda
convCoordsInserterX,convCoordsInserterY
附加到列表中,但您应该使用
()
运行lambdas并附加来自这些lambda
的结果(convCoordsInserterX(),convCoordsInserterY(),20,20)
。或者你可以跳过lambdas-
(convCoords(camX,0,2),convCoords(0,camY,3),20,20)