Бюро переписей США использует специальную кодировку под названием «soundex», чтобы найти информацию о человеке.Soundex - это кодировка фамилий (фамилий), основанная на том, как звучит фамилия, а не на том, как она написана.Фамилии, которые звучат одинаково, но пишутся по-разному, как SMITH и SMYTH, имеют одинаковый код и хранятся вместе.Система кодирования soundex была разработана таким образом, чтобы вы могли найти фамилию, даже если она была записана под разными написаниями.
В этой лабораторной работе вы будете разрабатывать, кодировать и документировать программу, которая будет генерировать код soundex при вводес фамилиейУ пользователя будет запрошена фамилия, и программа должна вывести соответствующий код.
Основные правила кодирования Soundex
Каждая кодировка фамилии soundex состоит из буквы и трех чисел.Используемая буква всегда является первой буквой фамилии.Номера присваиваются остальным буквам фамилии в соответствии с руководством по звуку, показанным ниже.Нули добавляются в конце, если необходимо, чтобы всегда создавался четырехсимвольный код.Дополнительные письма не учитываются.
Руководство по кодированию Soundex
Soundex назначает номер для различных согласных.Согласным, которые звучат одинаково, присваивается один и тот же номер:
Число согласных
1 B, F, P, V 2 C, G, J, K, Q, S, X, Z 3 D, T 4 L 5 M, N 6 R
Soundex игнорирует буквы A, E, I, O, U, H, W и Y.
Существует 3 дополнительных правила кодирования Soundexкоторые следуют.Хороший дизайн программы будет реализовывать каждую из них как одну или несколько отдельных функций.
Правило 1. Имена с двойными буквами
Если фамилия имеет какие-либо двойные буквы, их следует рассматривать как одну букву.Например:
Гутьеррес кодируется G362 (G, 3 для T, 6 для первого R, второй R игнорируется, 2 для Z).Правило 2. Имена с буквами бок о бок, которые имеют одинаковый кодовый номер Soundex
Если фамилия имеет разные буквы рядом и имеют одинаковый номер в руководстве по кодированию soundex, их следует рассматриватькак одно письмо.Примеры:
Pfister кодируется как P236 (P, F игнорируется, поскольку он считается таким же, как P, 2 для S, 3 для T, 6 для R).
Джексонкодируется как J250 (J, 2 для C, K игнорируется так же, как C, S игнорируется так же, как C, 5 для N, добавляется 0).
Правило 3. Разделители согласных
3.А.Если гласная (A, E, I, O, U) разделяет две согласные, которые имеют одинаковый код soundex, то согласная справа от гласной кодируется.Пример:
Tymczak кодируется как T-522 (T, 5 для M, 2 для C, Z игнорируется (см. Правило «Бок о бок» выше), 2 для K).Поскольку гласная «А» разделяет Z и K, K кодируется.3.b.Если «H» или «W» разделяют две согласные, имеющие одинаковый код soundex, то согласная справа не кодируется.Пример:
* Ашкрафт кодируется A261 (A, 2 для S, C игнорируется, поскольку совпадает с S с H между, 6 для R, 1 для F).Он не закодирован A226.
Пока это мой код:
surname = raw_input("Please enter surname:")
outstring = ""
outstring = outstring + surname[0]
for i in range (1, len(surname)):
nextletter = surname[i]
if nextletter in ['B','F','P','V']:
outstring = outstring + '1'
elif nextletter in ['C','G','J','K','Q','S','X','Z']:
outstring = outstring + '2'
elif nextletter in ['D','T']:
outstring = outstring + '3'
elif nextletter in ['L']:
outstring = outstring + '4'
elif nextletter in ['M','N']:
outstring = outstring + '5'
elif nextletter in ['R']:
outstring = outstring + '6'
print outstring
в достаточной степени выполняет то, о чем его просят, я просто не уверен, как кодировать три правила.Вот где мне нужна помощь.Итак, любая помощь приветствуется.