from math import log10, ceil from random import shuffle, sample BOARD_SIDE = 15 BOARD_COUNT = BOARD_SIDE * BOARD_SIDE * 4 NUMS = BOARD_COUNT nums = list(range(NUMS)) shuffle(nums) print(','.join(str(n) for n in nums)) print() align = ceil(log10(NUMS)) boards = [] for b in range(BOARD_COUNT): bnums = sample(nums, BOARD_SIDE * BOARD_SIDE) rows = [] for y in range(BOARD_SIDE): row = [] for x in range(BOARD_SIDE): n = bnums.pop() row.append(f'{n:>{align}}') rows.append(' '.join(str(n) for n in row)) boards.append('\n'.join(rows)) print('\n\n'.join(boards))