<p>上面的代码工作得很好。它使<code>make_computer_move(board, avail_col)</code>在填充给定列时将列号返回给main。在主菜单中,此栏在再次调用make_computer_board之前取出:</p>
<pre><code>import random
def display_board(board):
col = " "
cols = len(board[0])
for index1 in range(cols):
col += "%i " % index1
print col
for index2 in range(len(board)):
print str(index2) + ": " + " | ".join(board[index2]) + " |"
print " " + "---+" * cols
def make_computer_move(board, avail_cols):
col = random.choice(avail_cols)
for row in range(len(board)-1, -1, -1): # counts from bottom of board and up
if board[row][col] == " ": # if there is a blank space, put a "O" and break
print "The pairing is (%i,%i)" % (row,col) #Print the coordinates
board[row][col] = 'O'
break
if row == 0: #arrives to the last row
return col
def main():
board = [[" ", " ", " ", " ", " "] for i in range(5)]
avail_cols = range(len(board[0]))
display_board(board)
for counter in range(25):
filled = make_computer_move(board, avail_cols)
display_board(board)
if filled is not None: avail_cols.remove(filled)
main()
</code></pre>
<p>注:</p>
<ol>
<li>随机导入现在位于顶部。在</li>
<li>代码在PEP-8之后得到了一些美化。在</li>
<li>我准备了一份清单</li>
<li>对<code>display_board(board)</code>的两个调用。第一个平局开始
步骤,secon one已在<code>make_computer_move</code>之后移动到
程序完成后画最后一个图形</li>
<li>用%插值法简化某些直线</li>
</ol>
<p>还有一些效率低下的地方。例如,每次调用函数时都要计算<code>len(board[0])</code>,因为板始终保持相同的大小。在</p>