Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在10*10矩阵中生成随机字母_Python - Fatal编程技术网

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

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

[在此处输入图像描述][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
随机导入
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个。考虑到矩阵元素与字母的比率,我们真的希望把它们都用光。是的,我知道。但正如你所说,规则并不明确。如果你说的是真的。然后在代码中稍加调整就可以了。到现在为止,我还是保持原样。