在网格(2D数组)python中生成随机整数对
我被要求为一个学校项目制作一个数字匹配游戏,该项目涉及在网格中生成随机数字。我已经成功地生成了充满随机数的网格,但我需要它们成对出现,以便它们可以匹配。任何帮助都将不胜感激。以下是我目前的代码: def play(): 随机输入在网格(2D数组)python中生成随机整数对,python,Python,我被要求为一个学校项目制作一个数字匹配游戏,该项目涉及在网格中生成随机数字。我已经成功地生成了充满随机数的网格,但我需要它们成对出现,以便它们可以匹配。任何帮助都将不胜感激。以下是我目前的代码: def play(): 随机输入 sizeofgrid() board = [] showboard = [] for row in range(gridsize): board.append([]) for column in range(gridsize): b
sizeofgrid()
board = []
showboard = []
for row in range(gridsize):
board.append([])
for column in range(gridsize):
board[row].append(random.randint(0, 9))
def print_board(board):
for row in board:
print(' '.join([str(i) for i in row]))
showboard = [['O' for _ in range(gridsize)] for _ in range(gridsize)]
print_board(showboard)
print_board(board)
一种方法可能是生成所需数字的一半,然后将该列表加倍。然后,重新排列所需的值并将其调整到网格中
from random import randint, shuffle
size = 4 # must be even
pairs = size**2/2
pool = range(pairs) * 2
# [0, 1, 2, 3, 4, 5, 6, 7,
# 0, 1, 2, 3, 4, 5, 6, 7]
shuffle(pool)
grid = [pool[i:i+size] for i in range(0, size**2, size)]
# [[4, 5, 0, 7], [1, 7, 3, 5], [2, 1, 2, 6], [4, 0, 3, 6]]
你需要改变你的方法。您可以尝试以下两种方法之一:
for _ in range(width * height // 2):
number = pick_random_number()
loc1 = find_random_empty_spot()
board[loc1.row][loc1.col] = number
loc2 = find_random_empty_spot()
board[loc2.row][loc2.col] = number
num_picks = width * height // 2
picks = []
for _ in range(num_picks):
number = pick_random_number()
picks.extend([number, number])
random.shuffle(picks)
for row in range(height):
for col in range(width):
board[row][col] = picks.pop()
这两种方法中的任何一种都可以让您获得所需的成对行为。您选择哪一个是一个舒适的问题。您希望每个数字只有两个吗?或者,数字0-9根据需要重复多次,但每次都以偶数结尾?是的,我需要每个数字中的两个,它们在网格周围以随机位置排列。考虑一下,它可以是0到填充网格所需的数量(网格的大小由用户选择)。很明显,我已经确定网格中只能有偶数个空格。感谢您的帮助,我将尝试一下。感谢您的帮助,我将如何生成随机位置?我会用坐标吗?这是一种方法。在
范围(宽度)
中生成一个随机整数,在范围(高度)
中生成另一个随机整数。感谢您的帮助。