用于Tic-Tac-Toe的Python随机数生成器

用于Tic-Tac-Toe的Python随机数生成器,python,function,python-3.x,functional-programming,Python,Function,Python 3.x,Functional Programming,所以我是StackOverFlow的新手,我有一个关于我用Python制作的TictaToe游戏的快速问题。我已经完成了比赛的大部分,但是我对电脑玩家的动作感到困惑。我知道如何使它成为一个随机生成的数字。我现在有, 'board = [" ", " ", " ", " ", " ", " ", " ", " ", " "] compTurn = random.randrange(0,9) board[compTurn] = "O" printboard(board)` 我需要的是确保随机生成

所以我是StackOverFlow的新手,我有一个关于我用Python制作的TictaToe游戏的快速问题。我已经完成了比赛的大部分,但是我对电脑玩家的动作感到困惑。我知道如何使它成为一个随机生成的数字。我现在有,

'board = [" ", " ", " ", " ", " ", " ", " ", " ", " "]

compTurn = random.randrange(0,9)
board[compTurn] = "O"
printboard(board)`
我需要的是确保随机生成的数字不会是板上已经占用的空间

因此,假设我在游戏中先开始,然后选择左上角的取芯器或板[0]来放置我的“X”。我如何确保计算机random.range不会占据已经有数字的位置


多谢各位

对于这么小的东西,只需使用曲目编号即可:

used = []
r = random.randrange(0,9)
while r in used:
  r = random.randrange(0,9)
used.append(r)
这是最简单的方法,它也适用于大数,因为它很可能是常数来表示一个数。

试试:

random.choice([i for i, e in enumerate(board) if e == " "])

这是从板中所有空的索引中选择的

就需要多次旋转而言,这不是有点低效吗?它可能会运行很长时间,随着“已使用”索引的数量增加…@Samuelllitley,这就是为什么如果您计划使用所有结果,我不推荐它。对于n=10,这不是问题。此外,如果您使用的是总选择的一小部分,那么您可能会有一个无限的运行时,但很可能会有最坏的线性重试。平均而言,您会不断重试。