Skip to main content
 首页 » 编程设计

具有相同值的 Python 二维数组

2025年05月04日8lori

我是一名初级程序员,正在为学校做一项任务。任务是分配 4 个常量变量,然后使用代码计算出值。每个值都有一个对应的字母,程序要求用户输入 5 个数字,然后程序将返回该单词。代码如下:

array = [["L","N"], #define the 2d array, L=Letters, N=Numbers 
        ["-","-"]] #line for space 
 
a = 2#define the variables 
b = 1 
c = 7 
d = 4 
 
e = (a*b)+b#calcualtions 
f = c+b 
g = (d/a)-b 
h = c*a 
i = a+b+d 
j = c-a 
k = c-d*f 
l = c+a 
m = (c*a)-b 
n = a*d 
o = a+d-b 
p = (c*d)-a*(b+d) 
q = a*(c+(d-b)) 
r = (d*d)-b 
s = r-f-g 
 
array.append(["e",e]) 
array.append(["f",f]) 
array.append(["g",g])#append all the calculations 
array.append(["h",h]) 
array.append(["i",i]) 
array.append(["j",j]) 
array.append(["k",k]) 
array.append(["l",l]) 
array.append(["m",m]) 
array.append(["n",n]) 
array.append(["o",o]) 
array.append(["p",p]) 
array.append(["q",q]) 
array.append(["r",r]) 
array.append(["s",s]) 
 
def answer(): 
    len_row = len(array) 
    number_input = int(input("Enter number: ")) 
    for i in range(len_row): 
        if number_input == (array[i][1]): 
            return array[i][0] 
            break 
 
one_let = answer() 
two_let = answer() 
thr_let = answer() 
fou_let = answer() 
fiv_let = answer() 
 
print(one_let,two_let,thr_let,fou_let,fiv_let) 

我要输入的数字是 6、18、7、8 和 3。

打印的词是“spife”,要打印的词是“spine”。问题是有两个字母的变量为 8,而 Python 只获取第一个。有没有办法打印出两个单独的单词,但首先是二维数组中的第一个变量,第二个是第二个二维数组?即 spife 然后 spine

谢谢前面的帮助,我只是个初学者! :)

请您参考如下方法:

是的,你可以做到,但有点棘手,秘诀是在可能具有五个值的字母列表上使用 itertools.product。

首先,您需要使用更好的数据结构,例如 dict(在本例中为 collection.defaltdict)来保存具有一定值(value)的字母。你可以这样做:

import collections 
import itertools 
 
a = 2#define the variables 
b = 1 
c = 7 
d = 4 
e = (a*b)+b#calcualtions 
f = c+b 
g = (d/a)-b 
h = c*a 
i = a+b+d 
j = c-a 
k = c-d*f 
l = c+a 
m = (c*a)-b 
n = a*d 
o = a+d-b 
p = (c*d)-a*(b+d) 
q = a*(c+(d-b)) 
r = (d*d)-b 
s = r-f-g 
 
dat = collections.defaultdict(list) 
for c in "abcdefghijklmnopqrs": 
    dat[eval(c)].append(c) 

现在,在 dat 中,您有一个匹配某些数字的字母列表,例如

print(dat[6]) 
print(dat[18]) 
print(dat[7]) 
print(dat[8]) 
print(dat[3]) 

输出:

['s'] 
['p'] 
['i'] 
['f', 'n'] 
['e'] 

好的,那么您需要更改answer以返回字母列表,并收集用户输入:

def answer(): 
    number_input = int(input("Enter number: ")) 
    return dat[number_input] 
 
letts = [answer() for _ in range(5)] #collect five answers of the user 

最后的魔法在这里完成:

for s in map(lambda x: "".join(x),itertools.product(*letts)): 
    print(s) 

现在如果你感到困惑,那就学习:

  1. collections
  2. collections.defaultdict
  3. itertools
  4. itertools.product
  5. str.join