在10*10矩阵中生成随机字母。

问题描述 投票:-3回答:1

[在此输入图像描述][1]

如何创建一个10*10的矩阵,生成随机的字母,只使用一次,并且永远不超出矩阵。我知道我的while循环和底部的for语句是困扰我的原因?我也想在while循环中找到x和y的值。应该像上图那样?

import random

    N = 10

    FILLER = '.'



    line = []

    for i in range(N):

    line.append(FILLER)



    a=[]

    for i in range (N):

            line = line[:]

            a.append(line)


    x = 0

    y = 0

    letter = 'A'

    a[x][y] = letter



    letter = chr(ord(letter) + 1)



    while (letter <= 'Z'):

        x =

        y =

        if (a[x][y] == FILLER):


    for i in range(N):

        print(' '.join(a[i]))


  [1]: https://i.stack.imgur.com/9ZRvW.png
python
1个回答
0
投票

我没有研究过你的代码,但如果你想要一个10x10矩阵,包含EN语言的随机字母(不重复任何字母),你可以使用下面的代码。

import numpy as np
import string
import random

alpha=list(string.ascii_uppercase)

a=[]
for x in range(100):
    choice=random.choice(alpha)
    if choice in a:
        a.append('.')
    else:
        a.append(choice)

arr=np.array(a)
res_arr=arr.reshape([10,10])

print(res_arr)

输出。

[['S' 'B' 'N' 'P' '.' 'A' 'G' 'O' '.' 'I']
 ['U' 'Z' 'F' '.' 'Q' '.' 'K' 'C' 'H' 'X']
 ['L' '.' '.' 'E' 'T' '.' 'M' '.' 'J' 'V']
 ['.' '.' '.' '.' '.' '.' '.' '.' '.' 'Y']
 ['.' '.' '.' '.' '.' '.' '.' '.' '.' '.']
 ['.' 'R' '.' '.' '.' '.' '.' '.' '.' '.']
 ['.' '.' '.' '.' '.' '.' '.' '.' '.' '.']
 ['.' '.' '.' '.' '.' '.' '.' '.' '.' '.']
 ['.' '.' '.' '.' '.' 'D' '.' '.' '.' '.']
 ['.' '.' '.' '.' '.' '.' '.' '.' '.' '.']]

有几件事要注意

1)我还没有在矩阵中加入种子 random. 如果你想每次都生成相同的矩阵,你可以这样做,做那个用途。

random.seed(10) #replace 10 with integer of your choice (use this after generating alpha)

2)我留下了 res 作为一个numpy数组。如果你想把它作为列表,则使用:

res_arr=arr.reshape([10,10]).tolist() #replace this with the res_arr declaration in the above code

0
投票
from random import choice
from pprint import pprint
from string import ascii_lowercase as lc

def arr_gen():
    return [[choice(lc+len(lc)*".") for _ in range(10)] for _ in range(10)]

pprint(arr_gen())

OUTPUT

[['d', '.', 'v', 'h', 'n', '.', 'c', '.', '.', 'i'],
 ['d', '.', '.', 'x', 'q', '.', 'v', '.', 'k', 'k'],
 ['.', 'f', '.', '.', '.', '.', '.', 'g', '.', '.'],
 ['i', '.', 'q', 'b', '.', '.', 'n', '.', 'z', 'b'],
 ['e', '.', 'y', '.', 'h', 'e', 'v', 'h', '.', 'h'],
 ['i', 'x', '.', '.', 'k', '.', '.', 'd', '.', 'o'],
 ['j', '.', '.', 'q', 'v', '.', '.', 'j', '.', '.'],
 ['.', '.', '.', 'v', 'v', 'l', '.', '.', '.', '.'],
 ['.', 'f', '.', 'x', 'g', '.', 'u', 'i', '.', '.'],
 ['p', 'e', '.', 'l', '.', '.', 'l', 'h', 'i', '.']]

0
投票

没有什么高明之处,一步一步来,确保我们可以调整矩阵的大小,还能用。

from string import ascii_uppercase as letters
from random import randrange

SIZE = 10
EMPTY = ' '

matrix = [[EMPTY for _ in range(SIZE)] for _ in range(SIZE)]

for letter in letters[:min(SIZE ** 2, len(letters))]:  # in case we're using a tiny matrix
    while True:
        x, y = randrange(0, SIZE), randrange(0, SIZE)

        if matrix[x][y] == EMPTY:  # don't over write existing letter
            matrix[x][y] = letter
            break

print(*matrix, sep='\n')

OUTPUT

> python3 test.py
['X', ' ', ' ', ' ', ' ', ' ', ' ', 'Y', ' ', ' ']
[' ', ' ', 'J', ' ', ' ', 'E', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ', ' ', 'I', ' ', ' ', 'N']
[' ', ' ', ' ', 'S', ' ', 'B', 'F', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ', 'Q', ' ', ' ', ' ', ' ']
['A', 'M', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', 'C', 'D', ' ', ' ', ' ', ' ', 'T']
['U', ' ', ' ', ' ', 'R', ' ', ' ', 'K', ' ', 'W']
[' ', ' ', 'V', ' ', 'L', ' ', ' ', ' ', 'H', 'P']
[' ', ' ', 'Z', 'O', ' ', ' ', ' ', ' ', ' ', 'G']
>

0
投票

您可以使用 shuffle() 来自 random 模块:

from random import shuffle
import numpy as np

l = [n for n in range(65,91)]+[46 for n in range(74)]
shuffle(l)
print([[chr(a) for a in i] for i in np.reshape(l,(10,10))])

输出:

[['L', 'Q', '.', '.', '.', '.', 'V', '.', '.', '.'],
 ['K', '.', 'N', '.', '.', '.', '.', '.', '.', '.'],
 ['.', '.', 'F', '.', '.', '.', '.', '.', '.', '.'],
 ['S', '.', '.', '.', '.', '.', '.', '.', '.', 'X'],
 ['.', '.', '.', '.', '.', '.', '.', 'M', '.', '.'],
 ['.', 'D', '.', '.', 'T', '.', '.', 'J', 'P', '.'],
 ['I', '.', 'Z', '.', 'B', '.', '.', 'H', '.', '.'],
 ['.', '.', 'C', 'U', '.', '.', '.', '.', '.', '.'],
 ['O', '.', '.', '.', '.', '.', '.', '.', 'E', 'A'],
 ['R', '.', '.', 'Y', '.', 'G', 'W', '.', '.', '.']]

EXTRA:

这看起来更好:)

from random import shuffle
import numpy as np

l = [n for n in range(65,91)]+[46 for n in range(74)]
shuffle(l)

for i in np.reshape(l,(10,10)):
    print(' '.join([chr(a) for a in i]))

Output: EXTRA: This look nicer :)

. . . . O N X F . .
. . . C . T K . W .
. . . . . . . . . .
. . . Z . V . . . .
. M . . E . A S . .
J P . . H . . . R .
. Q . . . . . . . .
. G . . . I . . B D
. . . L Y . . . . .
U . . . . . . . . .
© www.soinside.com 2019 - 2024. All rights reserved.