尝试按名称修改这些变量是一个不好的主意(如果您真的想这样做,请参阅下面的旧答案)。这就是如何通过使用列表而不是一堆变量来改进代码:import random
board = [' '] * 9
def set_random(board,computer_mark):
board[random.randint(0, 8)] = computer_mark
def print_board(board):
lines = [' + %s +' % ('-'*5).join(['A','B','C'])]
for i in range(3):
lines.append('%d| %s |' % (i,' | '.join(board[3*i:(3*i+3)])))
if i < 2:
lines.append(' ' + '-'*19)
lines.append(' +%s+' % ('-'*17))
print('\n | | | |\n'.join(lines))
print_board(board)
random.seed(0)
set_random(board,'X')
print_board(board)
输出:
^{pr2}$
为了更好地了解哪个列表索引进入哪个字段,可以将索引可视化到板上:>>> print_board(list(map(str,range(9))))
+ A -B -C +
| | | |
0| 0 | 1 | 2 |
| | | |
-
| | | |
1| 3 | 4 | 5 |
| | | |
-
| | | |
2| 6 | 7 | 8 |
| | | |
+ -+
您可以使用locals()函数访问当前名称空间(作为dict)。因此,你可以做以下事情:-但是这是一个非常糟糕的主意。关于如何更好地解决代表和操纵董事会的一般性问题,请参见上述更多方法。在locals()[random_result] = computer_mark
编辑根据更新后的问题,完整示例:import random
valuea1 = valuea2 = valuea3 = valueb1 = valueb2 = valueb3 = valuec1 = valuec2 = valuec3 = " "
def board():
""" prints the tic-tac-toe board"""
print(" + -A B C +")
print(" | | | |")
print("1| " + valuea1 +" | " + valueb1 +" | " + valuec1 + " |")
print(" | | | |")
print(" ")
print(" | | | |")
print("2| " + valuea2 +" | " + valueb2 +" | " + valuec2 + " |")
print(" | | | |")
print(" ")
print(" | | | |")
print("3| " + valuea3 +" | " + valueb3 +" | " + valuec3 + " |")
print(" | | | |")
print(" + +")
return
random.seed(0) #to make this example reproducible
computer_mark = "X"
randomlist = ("valuea1", "valuec1", "valuea3", "valuec3")
random_result = random.choice(randomlist)
locals()[random_result] = computer_mark
board()
如果我执行上述代码,我将得到以下结果:+ -A B C +
| | | |
1| | | |
| | | |
| | | |
2| | | |
| | | |
| | | |
3| | | X |
| | | |
+ +