Python井字棋游戏重新赋值后变量不显示变化问题求助
代码问题排查
你代码存在三个核心问题,直接导致棋盘无法更新:
- 局部变量与全局变量隔离:
tabla()函数每次被调用时,都会在内部重新创建局部变量p1-p9并赋值为空格,你在函数外修改的p1和函数内部的p1不是同一个变量,渲染时永远用的是函数内的空值。 - 玩家符号分配逻辑完全错误:
- 函数没有接收用户输入的选择作为参数,判断条件写的是
assigments_of_x_or_o == 'X',相当于拿函数本身和字符串做对比,永远不可能成立 - 条件判断语法错误:
a == 'X' or 'x'的实际执行逻辑是(a == 'X') or ('x'),非空字符串的布尔值永远为True,第一个判断会无条件触发 - 函数内定义的
player1、player2是局部变量,函数外无法访问
- 函数没有接收用户输入的选择作为参数,判断条件写的是
- 位置判断逻辑不生效:
input()返回的是字符串类型,直接和整数1对比永远为False,给p1赋值的代码根本不会执行。
修复后可运行的参考代码
# 全局定义棋盘位置变量 p1 = p2 = p3 = p4 = p5 = p6 = p7 = p8 = p9 = ' ' player1 = '' player2 = '' # 渲染棋盘 def tabla(): print([f'{p1}',f'{p2}',f'{p3}']) print([f'{p4}',f'{p5}',f'{p6}']) print([f'{p7}',f'{p8}',f'{p9}']) # 分配玩家符号 def assigments_of_x_or_o(choose): global player1, player2 if choose.lower() == 'x': player1 = 'X' player2 = 'O' print('Player1 will be X, and player2 will be O!') elif choose.lower() == 'o': player1 = 'O' player2 = 'X' print('Player1 will be O, and player2 will be X!') # 程序主逻辑 print('Welcome to my game!\nPlease select the following!') x_ili_o = input('Do you want to be X or O? ') assigments_of_x_or_o(x_ili_o) tabla() koj_place = int(input('Player1, what place?(1-9): ')) if koj_place == 1: p1 = player1 tabla()
内容的提问来源于stack exchange,提问作者Jovan0000
相关产品推荐
相关产品推荐

