提问人:C_b3al 提问时间:11/17/2023 更新时间:11/19/2023 访问量:18
字典值上的 For 循环返回不正确的布尔值
For Loop on Dictionary Values Returning Incorrect Bool Value
问:
我正在学习用 python 编码,并尝试编写一个井字游戏。我使用了一个函数来评估游戏是否已绘制(应该只有一个实例是 True - 其中 3x3 网格中的所有空格都由 Xs 或 O 填充),但它返回了网格特定排列的错误值。
当玩家尝试时,棋盘的原始字典值(数字 1-9)被替换为 Xs/O(例如下面的)。
# board prior to starting game
board1 = {1:'1', 2:'2', 3:'3', 4:'4', 5:'5', 6: '6', 7: '7', 8:'8', 9:'9'}
# board after 3 turns
board4 = {1:'X', 2:'O', 3:'X', 4:'4', 5:'5', 6: '6', 7: '7', 8:'8', 9:'9'}
这是我正在使用的功能和我遇到的问题。
def game_drawn(board):
for i in board.values():
if i not in ['1','2','3','4','5','6','7','8','9']:
game_drawn = True
else:
game_drawn = False
return game_drawn
board9 = {1:'X', 2:'O', 3:'X', 4:'O', 5:'O', 6: 'X', 7: '7', 8:'X', 9:'O'}
print(game_drawn(board9))
# calling the function on this particular arrangement returns True, when it should return False. I've not had this problem with any other arrangement of the grid.
我尝试要求程序在循环运行时打印每个 i 值,然后打印函数的结果;似乎当循环到达“7”时,它不会运行布尔运算,而是跳到下一个值 i。
答:
0赞
C_b3al
11/17/2023
#1
我陈述的逻辑是不正确的:每次迭代都覆盖了前一次迭代;因此,只要棋盘中第 9 个位置的值 != 9,函数的结果就是真的。if
i
我更改了函数以将 Y 或 N 值写入新列表,具体取决于是否可以在我比较的列表中找到该值。然后,使用单独的语句,我可以根据新列表中是否存在 N 值来评估游戏是赢了还是平了。i
if
解决这个问题有点迂回,但它正在工作。
def game_drawn(board):
drawn = []
for i in board.values():
if i not in ['1','2','3','4','5','6','7','8','9']:
drawn.append('Y')
else:
drawn.append('N')
if 'N' in drawn:
game_drawn = False
else:
game_drawn = True
return game_drawn
board9 = {1:'X', 2:'O', 3:'X', 4:'O', 5:'O', 6: 'X', 7: '7', 8:'X', 9:'O'}
print('Board 9: ' + str(game_drawn(board9)))
下一个:自由式项目。如何遍历多值参数
评论
game_drawn