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

如何将choose()返回值持久存入board_full()的places列表

棋盘位置累计存储与满盘校验实现

问题原因

当前代码无法累计存储位置的核心原因是:

  • places列表定义在board_full()函数内部,属于局部变量,每次调用函数都会重新执行places = []创建空列表,之前存入的数值会在函数执行结束后被销毁,自然无法保留历史记录。
  • 原choose()函数存在缩进错误,while循环下的输入逻辑没有正确缩进,运行时会直接触发语法报错。
  • 缺少重复位置校验逻辑,即使用户重复选同一个位置,也会被计入列表长度,导致满盘判断不准。

可直接运行的修复代码

推荐使用传参的实现方式,避免全局变量带来的调试麻烦:

def choose():
    choose_input = 'wrong'
    # 修正while循环缩进
    while choose_input not in ['1','2','3','4','5','6','7','8','9']:
        choose_input = input('Which place you want to choose from 1 to 9 ')
        if choose_input not in ['1','2','3','4','5','6','7','8','9']:
            print('Sorry, wrong input! Please try again!')
    return int(choose_input)

def board_full(selected_places):
    # 直接基于传入的已选位置列表判断长度,不需要在函数内初始化列表
    return len(selected_places) >= 9

if __name__ == "__main__":
    # 循环外初始化一次已选位置列表,所有选择记录都存在这里
    places = []
    while not board_full(places):
        pos = choose()
        # 增加重复位置校验
        if pos in places:
            print("This position is already occupied, please choose another!")
            continue
        places.append(pos)
        print(f"Current selected positions: {places}")
    print("All 9 positions are taken, game end!")

逻辑说明

  • 存储位置的列表只在游戏启动时初始化一次,不会每次调用校验函数就重置。
  • 用户输入合法后先判断位置是否已被占用,没被占用才追加到列表里。
  • board_full()只负责接收已选列表、返回是否满盘的布尔值,职责单一,后续调整逻辑更方便。

内容的提问来源于stack exchange,提问作者Vaibhav Shinde

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:21:23