我试图制作一个15x15网格,每个元素都是0到5之间的随机数。为什么这不起作用?
import random
board = []
for row in range(15):
board.append([])
for column in range(15):
board[row].append(random.randint(0,5))
def print_board(board):
for row in board:
print(' ').join(row)
答案 0 :(得分:1)
你不能用整数str.join,只能用字符串。尝试更改此行
print(' ').join(row)
对此:
print(' '.join([str(s) for s in row]))
答案 1 :(得分:0)
您没有指定发生的事情,或者您预计会发生什么。
首先,您的代码并未显示您已拨打print_board()
。你可能想这样做:
print_board(board)
然后你会收到错误。如果您使用的是Python 2,那么您将看到:
>>> print_board(board)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in print_board
TypeError: sequence item 0: expected string, int found
因为str.join()
只将字符串作为输入,而不是整数,而row
列表包含这些字符。
在Python 3中,你会看到:
>>> print_board(board)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in print_board
AttributeError: 'NoneType' object has no attribute 'join'
因为您调用了print()
函数,然后尝试加入该调用的返回值。
无论哪种方式,您都可以通过正确使用str.join()
来修复错误,将所有整数值映射到字符串,并将结果传递给print()
(在Python 2中,在这种情况下忽略外部括号):
print(' '.join([str(i) for i in row]))
通过该修复,打印电路板显示您已设法正确生成电路板:
>>> def print_board(board):
... for row in board:
... print(' '.join(map(str, row)))
...
>>> print_board(board)
2 1 1 4 0 5 3 2 1 0 5 3 4 1 3
4 1 0 1 4 4 3 3 5 0 0 0 4 5 2
2 0 3 3 2 4 0 1 0 3 2 3 3 0 2
2 0 5 2 2 3 4 1 3 1 4 4 0 1 5
4 0 4 3 3 5 4 4 0 4 5 2 2 2 4
2 0 1 4 5 1 3 0 4 2 4 1 4 5 1
5 5 0 1 4 3 0 3 2 2 4 1 1 0 3
4 2 1 1 3 1 4 5 0 5 1 4 1 0 2
1 3 4 1 4 1 2 0 0 4 1 5 4 3 5
1 0 3 1 2 2 0 0 4 1 5 5 4 4 0
3 5 3 1 5 0 3 4 5 5 4 0 3 1 4
0 2 5 5 0 2 1 3 0 0 2 2 2 0 3
4 1 1 1 4 4 1 5 1 5 3 1 2 5 2
2 5 5 2 1 4 4 2 5 5 2 1 3 2 2
3 1 1 5 3 0 4 5 2 1 1 2 3 0 2