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

Python3.6贪吃蛇游戏报错TypeError:需整数参数却传入浮点数

修复Python贪吃蛇游戏的TypeError问题

这个错误很典型——在Python 3中,使用/进行除法运算会返回浮点数,但curses.addch()方法要求传入的坐标参数必须是整数类型,这就是你看到TypeError: integer argument expected, got float的原因。咱们来一步步修复:

核心修复:替换除法运算符

把代码中所有使用/的地方换成//(整数除法),这样计算出来的坐标会直接是整数,完全符合curses的要求:

  • 原代码:snk_x = sw/4 → 修改为:snk_x = sw // 4
  • 原代码:snk_y = sh/2 → 修改为:snk_y = sh // 2
  • 原代码:food = [sh/2, sw/2] → 修改为:food = [sh // 2, sw // 2]

可选优化:边界判断的严谨性

原代码中碰撞边界的判断snake[0][0] in [0,sh] or snake[0][1] in [0, sw]可以稍微调整得更严谨:窗口的有效行范围是0到sh-1,有效列范围是0到sw-1,所以碰到sh或sw时已经超出窗口,你可以把判断改成:

if snake[0][0] <= 0 or snake[0][0] >= sh or snake[0][1] <=0 or snake[0][1] >= sw or snake[0] in snake[1:]:

不过这不是导致当前错误的原因,只是让逻辑更准确。

修复后的完整代码

import random
import curses

s = curses.initscr()
curses.curs_set(0)
sh, sw = s.getmaxyx()
w = curses.newwin(sh, sw, 0, 0)
w.keypad(1)
w.timeout(100)

# 用整数除法替换浮点数除法
snk_x = sw // 4
snk_y = sh // 2
snake = [
    [snk_y, snk_x],
    [snk_y, snk_x-1],
    [snk_y, snk_x-2]
]

# 初始化食物坐标用整数除法
food = [sh // 2, sw // 2]
w.addch(food[0], food[1], curses.ACS_PI)

key = curses.KEY_RIGHT
while True:
    next_key = w.getch()
    key = key if next_key == -1 else next_key

    # 可选:优化后的边界判断
    if snake[0][0] <= 0 or snake[0][0] >= sh or snake[0][1] <=0 or snake[0][1] >= sw or snake[0] in snake[1:]:
        curses.endwin()
        quit()

    new_head = [snake[0][0], snake[0][1]]
    if key == curses.KEY_DOWN:
        new_head[0] +=1
    if key == curses.KEY_UP:
        new_head[0] -=1
    if key == curses.KEY_LEFT:
        new_head[1] -=1
    if key == curses.KEY_RIGHT:
        new_head[1] +=1

    snake.insert(0, new_head)

    if snake[0] == food:
        food = None
        while food is None:
            nf = [
                random.randint(1, sh-1),
                random.randint(1, sw-1)
            ]
            food = nf if nf not in snake else None
        w.addch(food[0], food[1], curses.ACS_PI)
    else:
        tail = snake.pop()
        w.addch(tail[0], tail[1], ' ')

    w.addch(snake[0][0], snake[0][1], curses.ACS_CKBOARD)

现在运行修改后的snakes.py,应该就能正常启动贪吃蛇游戏,不会再出现TypeError了。

内容的提问来源于stack exchange,提问作者wahab memon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:00:02