Python跨函数检查APPLE变量存在性的问题求助
问题解决与代码修正
核心问题分析
- 参数冗余与调用错误:
_2_is_apple函数定义了row和column参数,但内部通过循环重新赋值这两个变量,完全用不上传入的参数;调用时不传参自然触发报错。 - 逻辑错误:原函数的循环中第一次判断就直接
return,只会检查棋盘第一个格子(A0),无法遍历整个棋盘验证苹果位置。 - 全局变量名错误:
_1_print_game_board里的全局变量写成了Board_HEIGHT和Board_WIDTH,和全局定义的BOARD_HEIGHT/BOARD_WIDTH大小写不一致,会导致未定义错误。 - 蛇身判断错误:
_1_print_game_board中直接用_3_is_snake == 1的写法错误,_3_is_snake是函数,需要传入当前格子的行和列参数调用。
修改后的完整代码
import random BOARD_WIDTH = 8 BOARD_HEIGHT = 8 SNAKE = ["A0"] # 初始化蛇的初始位置,避免空列表 ORIENTATION = 4 APPLE = "A0" APPLE_LIVES = 12 APPLE_GOT_EATEN = False LIVES = 3 SCORE = 0 BIGGER_SNAKE = False def _2_is_apple(): # 遍历整个棋盘,检查APPLE的格式是否合法且存在于棋盘范围内 for row in range(BOARD_HEIGHT): for column in range(BOARD_WIDTH): if APPLE == f"{chr(row + 65)}{column}": return True # 遍历完所有格子都没匹配,返回False return False def _3_is_snake(row_char, column): # 判断当前格子是否是蛇身,返回对应的形态标识 position = f"{row_char}{column}" if position in SNAKE: if position == SNAKE[0]: # 蛇头 return ORIENTATION else: # 蛇身 return 1 return 0 def _1_print_game_board(): global BOARD_HEIGHT, BOARD_WIDTH print(f"Lives: {LIVES} - Apple Lives: {APPLE_LIVES} - Score: {SCORE}") print("----------------------------") for i in range(BOARD_HEIGHT): row_char = chr(i + 65) print(f"{row_char} |", end="") for j in range(BOARD_WIDTH): if APPLE == f"{row_char}{j}": print(" O ", end="") else: snake_status = _3_is_snake(row_char, j) if snake_status == 1: print(" + ", end="") elif snake_status == 2: print(" ∧ ", end="") elif snake_status == 3: print(" < ", end="") elif snake_status == 4: print(" v ", end="") elif snake_status == 5: print(" > ", end="") else: print(" ", end="") print("|", end="") print() print("----------------------------") print(" 0 1 2 3 4 5 6 7") def _4_move_snake(): # 补充蛇移动逻辑 pass def _5_detect_collision(): # 补充碰撞检测逻辑 pass def _6_spawn_apple(): # 补充生成苹果逻辑 pass def main(): _1_print_game_board() # 调用_2_is_apple并打印结果,验证苹果是否在棋盘上 apple_exists = _2_is_apple() print(f"苹果是否在棋盘上: {apple_exists}") _4_move_snake() _5_detect_collision() _6_spawn_apple() if __name__ == '__main__': main()
关键修改说明
_2_is_apple函数:- 删除冗余的
row和column参数,直接遍历全局定义的棋盘尺寸 - 调整逻辑:遍历完所有格子都没匹配时才返回
False,确保检查整个棋盘
- 删除冗余的
_1_print_game_board函数:- 修正全局变量名的大小写错误,改为
BOARD_HEIGHT和BOARD_WIDTH - 修复蛇身判断逻辑:调用
_3_is_snake函数并传入当前格子的行字符和列数,根据返回值渲染对应符号
- 修正全局变量名的大小写错误,改为
_3_is_snake函数:补充基础实现,根据蛇的位置列表判断当前格子是否为蛇身/蛇头,返回对应标识main函数:修正_2_is_apple的调用方式,无需传参,同时移除无效的_3_is_snake引用
内容的提问来源于stack exchange,提问作者Jonny
相关产品推荐
相关产品推荐

