2011-09-13 240 views
0

我想讓我的程序以25個字母作爲輸入,並將它們放在某種列表中,以便我可以制定可以與另一個字符連接的字母的規則,並從中獲取三個不重疊的字詞。創建矩陣

我所做的是這樣的:

def matris(): 
    matris = [[],[],[],[],[]] 
    counter = 0 
    counter2 = 0 
    counter3 = 0 
    counter4 = 0 
    counter5 = 0 

    while counter !=5: 
     matris[0].append(raw_input('One letter: ')) 
     counter+=1 

    while counter2 !=5: 
     matris[1].append(raw_input('One letter: ')) 
     counter2+=1 

    while counter3 !=5: 
     matris[2].append(raw_input('One letter: ')) 
     counter3+=1 

    while counter4 !=5: 
     matris[2].append(raw_input('One letter: ')) 
     counter4+=1 

    while counter5 !=5: 
     matris[4].append(raw_input('One letter: ')) 
     counter5+=1 

    return matris 

因此,例如,當我運行這一點,問我「一個信」 * 25可以生成一個矩陣看起來像這樣:

matris = [['a', 'g', 'i', 't', 'u'] 
      ['s', 'r', 'g', 's', 'm'] 
      ['f', 'e', 'd', 'c', 't'] 
      ['r', 's', 'i', 'f', 'x'] 
      ['t', 'i', 't', 't', 'i']] 

如果任何人有更好的方式來做到這一點,我會感謝你,如果你分享它。而且這種方式可以與我希望我的程序執行的操作一致,但我不知道我能夠使用我的版本。

我有我做的東西像dictionary.txt: 字典=開放(「dictionary.txt」,「R」)

,所以我想我會嘗試啓動匹配matris[0][0]+matris[0][1],看看是否有一個詞以ie 'a'+'g'開頭,然後取下一個字母,直到找到允許說出三個最好(最有價值)的單詞。

我猜我需要一個班。因此,這是我已經走了多遠:

Class hypotes: 
    def __init__ (self, usedPosiiton, word): 
    self.u = usedPosition 
    self.w = word 
    positions = [] 
    bestWords = [] # There should be maximum three words in this list, 
       # the words with highest score 

我認爲我必須保存在數組中的位置,這樣我以後可以確保是最好的話不要使用相同的字母?

猜測我要在這堂課上需要一些幫助。

letterValuePoints = {'A':50, 'B':110, 'C':190, 'D':70, 'E':50, 'F':90, 
        'G':70, 'H':70, 'I':50, 'J':170, 'K':70, 'L':50, 
        'M':70, 'N':50, 'O':70, 'P':110, 'R':50, 'S':50, 
        'T':50, 'U':110, 'V':90, 'X':190, 'Y':170, 'Z':210, 
        'Å':110, 'Ä':90, 'Ö':110} 

我想後來當我想給每個字母的值,我會做這樣的,但我不知道這是否會是一個很好的辦法嗎?

回答

1

不要以爲我得到的問題。 但是,這裏有一些片段讓你開始。

只需一次閱讀25個字母,並使用描述的分區生成器here 使用split將其發送到下面的生成器。

def chunks(l, n): 
    """ Yield successive n-sized chunks from l. 
    """ 
    for i in xrange(0, len(l), n): 
     yield l[i:i+n] 

import pprint 
a=raw_input('some letters: ') 
some letters: a b c d e f g h i j k l m n o p q r s t u v w x y 

pprint.pprint(list(chunks(a.split(), 5))) 
[['a', 'b', 'c', 'd', 'e'], 
['f', 'g', 'h', 'i', 'j'], 
['k', 'l', 'm', 'n', 'o'], 
['p', 'q', 'r', 's', 't'], 
['u', 'v', 'w', 'x', 'y']] 

如果你正在尋找做近似匹配,看看difflib

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy']) 
['apple', 'ape'] 
>>> import keyword 
>>> get_close_matches('wheel', keyword.kwlist) 
['while'] 
>>> get_close_matches('apple', keyword.kwlist) 
[] 
>>> get_close_matches('accept', keyword.kwlist) 
['except'] 

[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19], 
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29], 
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39], 
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49], 
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59], 
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69], 
[70, 71, 72, 73, 74]] 

這個我想你需要澄清你的問題有點:-)

+0

喜後,謝謝快速回復! =) 這是非常漂亮: 進口pprint DEF塊(L,N): 「」 「 」 「。收率連續N大小從升 塊」 爲i的x範圍(0,LEN( l),n): yield l [i:i + n] a = raw_input('some letters:') pprint.pprint(list(chunks(a。分裂(),5))) 但是,必須有一種方法來分割並返回與它的那些帶一個列表?親愛的,謝謝你的光臨! –

+0

看起來非常糟糕,也許我應該修改我的問題insted的.. =/ –

+0

看到你是瑞典! =)在這裏不能發送? 似乎有點難以起牀英文我需要什麼幫助,也許?試圖讓程序有條不紊掃描列表,現在包括的每五個字母五個列表,並設法找到與某個ordlista.txt匹配的單詞。所以我想,也許你應該開始在原地看着列表[0] [0]和list [0] [1],看看字典中的任何單詞的字母,並且如果它繼續列出[0] [2 ]和繼續下去,直到不能匹配任何更多的,然後做相同,但開始provess字母列表[0] [1] .. –