python - 当 False 循环时,将变量设置为 True 不会退出
问题描述
我正在使用 Python 制作井字游戏,我几乎完成了,但我遇到了 while 循环的问题。这是我用来检查玩家是否拥有的功能的简化版本。
def check_win(board, marker):
win = False
if board['A1'] == marker and board['B1'] == marker and board['C1'] == marker:
print(f'{marker} wins!')
win = True
return win
它在我的代码中。
player_win = False
while player_win == False:
# Player1's turn
board_dict = get_and_place_marker(board_dict, player1)
display_board(board_dict)
--> player_win = check_win(board_dict, player1)
# Player2's turn
board_dict = get_and_place_marker(board_dict, player2)
display_board(board_dict)
--> player_win = check_win(board_dict, player2)
在 check_win() 的第一个实例中,它确实将 player_win 分配给 True,但它不会退出循环。它转到 Player2 的代码,然后在 Player2 获胜时退出。我在这里做错了什么?不应该将 player_win 分配为 True 的第一时刻退出循环吗?
解决方案
如果玩家 1 获胜,您仍然给玩家 2 一个机会进行非获胜的移动,在这种情况下循环继续。条件不会仅仅因为条件中的变量发生变化而在循环体的中间被隐式评估。
不要让两个玩家在每次迭代中轮流,而是更改代码,以便恰好一个玩家轮流,每次在玩家之间交替。
from itertools import cycle
for player in cycle([player1, player2]):
board_dict = get_and_place_marker(board_dict, player)
if check_win(board_dict, player):
break
然后,您可以检查 的值player
以查看循环退出后实际获胜的情况。
推荐阅读
- xamarin.ios - Xamarin iOS < 11
- wix - Wix FindRelatedProducts 找到了一个未安装的产品
- python - 给定一组要识别的图像和一个训练有素的模型,我如何让模型识别图像?
- xml - Tasker 无法“恢复备份”XML 文档?
- netlogo - Netlogo - 使用行为空间动态更改每个实验的运行时间
- r - 如何修复“open.connection(x, "rb") 中的错误:HTTP 错误 503。” 用 rvest 抓取网站时?
- dart - 颤振飞镖功能在等待后跳到功能结束
- go - golang 中 server.GracefulStop() 的行为
- javascript-objects - 如何修复 javascirpt 中的“不是构造函数”错误
- python - 在 Python 的数据帧行中提取正则表达式匹配项,而不是组