我用Python创建了一个战舰游戏。目前,该游戏有一个简单的人工智能,随机猜测一个尚未在棋盘上猜到的地方试图找到两个大型战列舰。我通过给它一个模式来使AI变得更加聪明。为了生成AI的猜测,我使用以下代码。
while X == 0 | Y == 0:
X = 0
Y = 0
guess_col = guessCol(0, size - 1)
guess_row = guessRow(0, size - 1)
# Make sure the guess follows the pattern
if (guess_col + guess_row)%2 != 1:
X = 1
# Make sure the spot has not already been guessed
if board[guess_row][guess_col] != "~":
Y = 1
董事会如下所示。
1 2 3 4 5 6 7 8 9
1 ~ ~ ~ ~ ~ ~ ~ ~ ~
2 ~ ~ ~ ~ ~ ~ ~ ~ ~
3 ~ ~ ~ ~ ~ ~ ~ ~ ~
4 ~ ~ ~ ~ ~ ~ ~ ~ ~
5 ~ ~ ~ ~ ~ ~ ~ ~ ~
6 ~ ~ ~ ~ ~ ~ ~ ~ ~
7 ~ ~ ~ ~ ~ ~ ~ ~ ~
8 ~ ~ ~ ~ ~ ~ ~ ~ ~
9 ~ ~ ~ ~ ~ ~ ~ ~ ~
这种模式运作完美,但新的AI现在猜测它已经猜到的斑点,使其效率非常低而且不那么聪明。我也尝试过使用if board[guess_row][guess_col] == "~":
,但这会导致模式不起作用。如何只在已经猜过的地方进行AI猜测?
答案 0 :(得分:3)
该行:
while X == 0 | Y == 0:
不符合您的想法。 |
是按位OR,而在Python中(与C系列不同),它的优先级高于==
。因此,Python将该行解析为:
while X == (0 | Y) == 0:
相当于:
while X == Y == 0:
,由于比较运算符的链接,相当于:
while (X == Y) and (Y == 0):
相当于:
while (X == 0) and (Y == 0):
这绝对不是你写的X == 0 | Y == 0
所要达到的目标!
不使用按位OR,而是使用逻辑OR,在Python中拼写为or
:
while X == 0 or Y == 0: