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

Python代码第二个input()用户输入语句未执行如何排查解决

问题根因

第二个行选择的input()提示始终不执行,是因为程序在执行到该行之前就异常终止了,绝大多数场景是以下两个问题导致:

  • 非法输入触发类型转换错误:列选择的输入直接用int()强转,没有任何异常捕获。只要用户输入非纯数字内容(包括字母、符号、带空格的多段内容、空输入),int()转换会直接抛出ValueError,程序当场终止,根本不会执行到下一行的行输入代码。
  • 函数返回值缺失导致后续类型错误:初始化棋盘时你写了game = game_board(game, flag=True),如果自定义的game_board()函数没有显式return更新后的棋盘对象,函数会默认返回None,后续操作棋盘对象时会提前抛出NoneType相关的类型错误,中断程序执行。
修复方案

按以下步骤调整即可解决问题:

  • 补全game_board()函数的返回逻辑,所有分支执行完后都要返回传入的game_map对象,避免game变量被赋值为None。
  • 给所有用户输入加循环校验和异常捕获:一方面拦截非数字输入导致的转换错误,另一方面限制输入值在0-2的合法范围内,避免数组越界。
  • 调用game_board()执行落子操作时,尽量用关键字参数传参,不要完全依赖位置匹配,避免参数顺序写错导致函数内部逻辑错乱。

修复后核心代码参考

import itertools

# 按照你给出的参数定义补全的game_board示例,可根据自己的逻辑调整
def game_board(game_map, player=0, row=0, column=0, flag=False):
    if flag:
        print("=== 井字棋游戏开始 ===")
        for r in game_map:
            print(r)
        return game_map
    # 校验位置是否已被占用
    if game_map[row][column] != 0:
        print("该位置已有棋子,请重新选择")
        return game_map, False
    # 落子
    game_map[row][column] = player
    # 打印更新后的棋盘
    print("当前棋盘状态:")
    for r in game_map:
        print(r)
    # 可在此处补充胜负判断逻辑,示例暂时返回落子成功
    return game_map, True

play = True
while play:
    # 初始化空棋盘
    game = [[0, 0, 0] for _ in range(3)]
    game_won = False
    game = game_board(game, flag=True)
    player_choice = itertools.cycle([1, 2])
    
    while not game_won:
        current_player = next(player_choice)
        print(f"\n当前轮次玩家:{current_player}")
        
        # 校验列输入
        while True:
            try:
                column_choice = int(input("请选择落子列(输入0、1、2):"))
                if 0 <= column_choice <= 2:
                    break
                print("输入范围错误,请输入0-2之间的数字")
            except ValueError:
                print("输入格式错误,请输入数字0、1、2")
        
        # 校验行输入
        while True:
            try:
                row_choice = int(input("请选择落子行(输入0、1、2):"))
                if 0 <= row_choice <= 2:
                    break
                print("输入范围错误,请输入0-2之间的数字")
            except ValueError:
                print("输入格式错误,请输入数字0、1、2")
        
        # 关键字传参避免顺序错误
        game, move_ok = game_board(game, player=current_player, row=row_choice, column=column_choice)
        # 落子无效时回退玩家回合
        if not move_ok:
            next(player_choice)
        
        # 此处补充胜负判断、游戏结束后是否重开的逻辑即可

内容的提问来源于stack exchange,提问作者Asmita Dasgupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:54:18