2014-01-22 132 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

相關問題