MicroPython中保存高分出现TypeError: unsupported types for __ge__: 'int', 'list'的原因
树莓派Pico俄罗斯方块高分保存功能报错排查
我在Raspberry Pi Pico上开发俄罗斯方块游戏时,尝试实现高分保存功能,但持续报错,无法定位代码问题,查阅相关方案也未解决。
报错代码片段
def game_over_screen(): pgb.fill_rect(240-240,240-240,240,240,PicoGameBoy.color(0,0,0)) pgb.fill_rect((GRID_OFFSET+GRID_COLS+1)*BLOCK_SIZE+1,16*BLOCK_SIZE, BLOCK_SIZE*7,BLOCK_SIZE*2, TEXT_BACKGROUND_COLOR) pgb.text("LINES",(GRID_OFFSET+GRID_COLS+2)*BLOCK_SIZE+1,16*BLOCK_SIZE+1,TEXT_COLOR) pgb.text("%8s" % lines,(GRID_OFFSET+GRID_COLS+2)*BLOCK_SIZE+1,17*BLOCK_SIZE+1,TEXT_COLOR) if score >= highscore: highscore.pop(0) highscore.append(score) pgb.fill_rect((GRID_OFFSET+GRID_COLS+1)*BLOCK_SIZE+1,16*BLOCK_SIZE, BLOCK_SIZE*7,BLOCK_SIZE*2, TEXT_BACKGROUND_COLOR) pgb.text("HIGHSCORE",(GRID_OFFSET+GRID_COLS+2)*BLOCK_SIZE+1,16*BLOCK_SIZE+1,TEXT_COLOR) pgb.text("%8s" % highscore,(GRID_OFFSET+GRID_COLS+2)*BLOCK_SIZE+1,17*BLOCK_SIZE+1,TEXT_COLOR) # draw text (LEVEL) pgb.fill_rect((GRID_OFFSET+GRID_COLS+1)*BLOCK_SIZE+1,13*BLOCK_SIZE, BLOCK_SIZE*7,BLOCK_SIZE*2, TEXT_BACKGROUND_COLOR) pgb.text("LEVEL",(GRID_OFFSET+GRID_COLS+2)*BLOCK_SIZE+1,13*BLOCK_SIZE+1,TEXT_COLOR) pgb.text("%8s" % level,(GRID_OFFSET+GRID_COLS+2)*BLOCK_SIZE+1,14*BLOCK_SIZE+1,TEXT_COLOR) # draw text (SCORE) pgb.fill_rect((GRID_OFFSET+GRID_COLS+1)*BLOCK_SIZE+1,10*BLOCK_SIZE, BLOCK_SIZE*7,BLOCK_SIZE*2, TEXT_BACKGROUND_COLOR) pgb.text("SCORE",(GRID_OFFSET+GRID_COLS+2)*BLOCK_SIZE+1,10*BLOCK_SIZE+1,TEXT_COLOR) pgb.text("%8s" % score,(GRID_OFFSET+GRID_COLS+2)*BLOCK_SIZE+1,11*BLOCK_SIZE+1,TEXT_COLOR) #pgb.fill_rect(60,90,120,240,BLACK) pgb.center_text("GAME OVER",WHITE) pgb.show() while True: time.sleep(0.500)
错误输出信息
Traceback (most recent call last): File "<stdin>", line 608, in <module> File "<stdin>", line 409, in game_over_screen TypeError: unsupported types for __ge__: 'int', 'list'
问题原因与修复方案
- 错误根源:代码中
if score >= highscore:这一行,score是整数类型,而highscore是列表类型,Python不允许直接用>=运算符比较整数和列表,因此触发类型错误。 - 修复步骤:
- 修正比较逻辑:如果
highscore是存储高分的列表(比如按从低到高排序),需要和列表中的具体分数比较,比如和列表里的最低分(第一个元素)对比,将代码改为:if score >= highscore[0]: highscore.pop(0) highscore.append(score) # 可选:对列表重新排序,保持从低到高顺序 highscore.sort() - 修正高分显示:当前代码
pgb.text("%8s" % highscore,...)会把整个列表打印出来,不符合显示需求,应该显示列表中的最高分,改为:
或者如果列表是按从低到高排序,也可以用pgb.text("%8s" % max(highscore),(GRID_OFFSET+GRID_COLS+2)*BLOCK_SIZE+1,17*BLOCK_SIZE+1,TEXT_COLOR)highscore[-1]取最后一个元素(最高分)。 - 初始化检查:确保
highscore初始化时是包含整数的列表,比如highscore = [0]或highscore = [1000, 800, 500]这样的初始高分值。
- 修正比较逻辑:如果
内容的提问来源于stack exchange,提问作者SCP-999
相关产品推荐
相关产品推荐

