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
相关产品推荐
相关产品推荐

