在网格(2D数组)python中生成随机整数对

2024-09-27 21:27:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我被要求为一个学校项目制作一个数字匹配游戏,其中包括在网格中生成随机数。我已经成功地生成了一个充满随机数的网格,但是我需要它们成对,这样才能匹配。任何帮助都将不胜感激。以下是我目前为止的代码:

def play(): 随机导入

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)

Tags: 项目inboard网格游戏fordefrange
2条回答

一种方法可能是生成所需数量的一半,然后将列表加倍。然后,将所需的值无序排列并调整到网格中。在

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]]

你需要改变你的方法。您可以尝试以下两种方法之一:

  1. 从一块空板开始。生成一个随机数,然后生成 板上的两个随机位置。继续生成,直到您发现 一个空位,两次。把随机数放入两个位置。在

    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
    
  2. 计算需要填充多少个位置。生成N/2 随机数,将每个随机数放入一个列表中,两次。现在, 洗牌列表,然后在棋盘上循环,插入 把名单放到黑板上。在

    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()
    

这两种方法中的任何一种都会让你得到你想要的配对行为。你选择哪一个是一个舒适的问题。在

相关问题 更多 >

    热门问题