2014-01-22 134 views
2

我是一名初学者程序员,我正在为学校做任务。任务是分配4个常量变量,然后使用代码来计算出该值。每个值都有一个相应的字母,程序要求用户键入5个数字,然后程序将返回该字。代码如下:具有相同值的Python 2D数组

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”字这意味着打印是“脊柱”。问题是有两个字母的变量是8,而Python只有第一个字母。有没有办法打印出两个单独的单词,但首先在二维数组中使用第一个变量,然后在第二个二维数组中使用第二个变量?即spife然后脊柱

谢谢你的帮助,我只是一个初学者! :)

+0

您是否允许更改计算? – Jack

+0

不,计算必须保持原样。 – user3225097

回答

1

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

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

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'] 

OK,那么你需要更改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
+0

谢谢!这有很大的帮助,我会看看模块,谢谢你:-) – user3225097

相关问题