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

Python跨函数检查APPLE变量存在性的问题求助

问题解决与代码修正

核心问题分析

  1. 参数冗余与调用错误:_2_is_apple函数定义了row和column参数,但内部通过循环重新赋值这两个变量,完全用不上传入的参数;调用时不传参自然触发报错。
  2. 逻辑错误:原函数的循环中第一次判断就直接return,只会检查棋盘第一个格子(A0),无法遍历整个棋盘验证苹果位置。
  3. 全局变量名错误:_1_print_game_board里的全局变量写成了Board_HEIGHT和Board_WIDTH,和全局定义的BOARD_HEIGHT/BOARD_WIDTH大小写不一致,会导致未定义错误。
  4. 蛇身判断错误:_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:35:36