2015-10-27 6 views
0

Я пытаюсь взять псевдокод из моего учебника и преобразовать его в функцию python. Псевдокод предназначен для создания таблицы сдвига для использования с сопоставлением строк Horspool.Создать таблицу сдвига для сопоставления строк в python из псевдокода

псевдо-код выглядит следующим образом:

ShiftTable(P[0..m - 1]) 
//Takes input pattern P[0..m-1] and alphabet of possible characters 
//Produces output Table[0..size-1] indexed by alphabet's characters and filled with shift sizes computed by formula 
    for i = 0 to size - 1 do Table[i] = m 
    for j = 0 to m - 2 do Table[P[j]] = m - 1 - j 
    return Table 

Мой код выглядит следующим образом:

def BuildShiftTable(pattern): 
    m = len(pattern) 
    alphabet = [i for i in string.ascii_lowercase] 
    print(alphabet) 
    for i in alphabet: 
     table[i] = alphabet[i] 
    for j in m - 2: 
     table[pattern[j]] = m-1-j 
    return table 

Это, очевидно, не работает, но я пытаюсь понять, как сделать то, что псевдокод делает и превращает это в рабочий код, потому что я не совсем уверен, что первый цикл цикла в псевдокоде означает, взяв size-1 из списка Table, если он еще не был создан. Любая помощь приветствуется.

ответ

0

Проблема, которую я вижу, заключается в том, что вы говорите for j in m-2. 'm-2' является int, потому что 'm' является int; письмо for j in int не имеет смысла. Я думаю, вы хотели написать for j in range(0,m-2).