2011-09-13 214 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] .. –