Создание матрицы - PullRequest
       13

Создание матрицы

0 голосов
/ 13 сентября 2011

Я хочу, чтобы моя программа взяла 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 = open ('dictionary.txt', 'r')

, поэтому я подумал, что я попытаюсь начать сопоставлять matris[0][0]+matris[0][1] и посмотреть, есть ли слово, начинающееся с т. Е. '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 Ответ

1 голос
/ 13 сентября 2011

Не думаю, что я понял вопрос. Вот, однако, некоторые фрагменты, чтобы начать работу.

Просто прочитайте 25 букв за один раз и используйте генератор разделов, как описано здесь используйте 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]]

После этого, я думаю, вам нужно немного прояснить свой вопрос: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...