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
相关产品推荐
相关产品推荐

