网格中的随机数

时间:2015-12-07 17:00:00

标签: python

我试图制作一个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)

2 个答案:

答案 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