Python 在10*10矩阵中生成随机字母
[在此处输入图像描述][1] 如何创建一个10*10的矩阵,生成随机字母,只使用一次,从不超出矩阵。我知道我的while循环,底部的for语句是什么绊倒了我?同时尝试在while循环中查找x和y值。假设看起来像上面的图片Python 在10*10矩阵中生成随机字母,python,Python,[在此处输入图像描述][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 ran
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
随机导入
N=10
填料='。'
行=[]
对于范围(N)中的i:
行。追加(填充)
a=[]
对于范围(N)中的i:
行=行[:]
a、 追加(行)
x=0
y=0
字母='A'
a[x][y]=字母
字母=chr(ord(字母)+1)
虽然(字母我没有研究过你的代码,但是如果你想要一个10x10的矩阵,包含来自英语的随机字母(不重复任何字母),你可以使用下面的代码
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.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
您可以使用random
模块中的shuffle()
:
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', '.', '.', '.']]
. . . . 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 . . . . . . . . .
额外:
这个看起来更好:)
输出:
[['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', '.', '.', '.']]
. . . . 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 . . . . . . . . .
输出
[['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', '.']]
> 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']
>
没什么聪明的,一步一步来,确保我们可以调整矩阵的大小,并且仍然可以工作:
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')
输出
[['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', '.']]
> 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']
>
“只使用它们一次”是什么意思?一个10x10矩阵有100个字段,填充所有字段,并且仍然使用每个字母不超过一次似乎是一项艰巨的任务!你知道字符或字母吗?我觉得在第五行出现三次'h'
可能会违反OP的“只使用它们一次”规则,但我想我们真的不知道这个谜题的完整规则。并不是说谜题的规则很清楚,但您的算法可以省略字母——您可以在示例输出中看到它,其中26个字母中仅使用了25个。考虑到矩阵元素与字母的比率,我们真的希望把它们都用光。是的,我知道。但正如你所说,规则并不明确。如果你说的是真的。然后在代码中稍加调整就可以了。到现在为止,我还是保持原样。