Бюро переписи США использует специальную кодировку под названием «soundex» для поиска информации о человеке. Soundex - это кодировка фамилий (фамилий), основанных на том, как звучит фамилия, а не как она написана. Фамилии, которые звучат одинаково, но различаются по-разному, например SMITH и SMYTH, имеют одинаковый код и подаются вместе. Система кодирования soundex была разработана так, что вы можете найти фамилию, даже если она, возможно, была записана под различными написаниями.Может использовать некоторую помощь в этом кодировании soundex
В этой лаборатории вы будете проектировать, кодировать и документировать программу, которая создает код soundex при вводе с фамилией. Пользователю будет предложено указать фамилию, и программа должна вывести соответствующий код.
Основные SOUNDEX Coding Правила
Каждый Саундэкс кодирования фамилии состоит из буквы и трех цифр. Используемое письмо всегда является первой буквой фамилии. Номера присваиваются остальным буквам фамилии в соответствии с приведенным ниже руководством soundex. Нулевые значения добавляются в конце, если необходимо, чтобы всегда создавать четырехсимвольный код. Дополнительные буквы не учитываются.
Саундэкс Coding Руководство
Саундэкс назначает номер для различных согласных. Согласные, которые звучат одинаково назначены один и тот же номер:
Номер Согласные
1 В, F, P, V 2 С, G, J, K, Q, S, X, Z 3 D, T 4 л 5 M, N 6 R
Саундэкс игнорирует буквы A, E, I, O, U, H, W и Y.
Есть 3 дополнительных Саундэкс правила кодирования, которые следуют , Хороший дизайн программы будет реализовывать их как одну или несколько отдельных функций.
Правила 1. Имена с двойным Letters
Если фамилия имеет какие-либо двойные буквы, они должны рассматриваться в качестве одной буквы. Например:
- Gutierrez кодируется G362 (G, 3 для T, 6 для первого R, второй R игнорируется, 2 для Z).
Правило 2. Имена с Letters Бок о Бок, которые имеют одинаковый номер Саундэкс Код
Если фамилия имеет разные буквы бок о бок, которые имеют тот же номер в руководстве кодирования Саундэкс, их следует рассматривать как одну букву. Примеры:
Пфистер кодируется как P236 (P, F игнорируется, так как считается, так же, как Р, 2 для S, 3 для Т, 6 для R).
Jackson кодируется как J250 (J, 2 для C, K игнорируется так же, как C, S игнорируется так же, как C, 5 для добавления N, 0).
Правило 3. Согласные Сепараторы
3.a.Если гласный (A, E, I, O, U) разделяет два согласных, которые имеют один и тот же код soundex, закодирован согласный справа от гласного. Пример:
- Tymczak кодируется как Т-522 (Т, 5 для M, 2 для C, Z игнорируются (см "бок-о-Side" правила выше), 2 для K). Поскольку гласный «A» разделяет Z и K, кодируется K.
3.b. Если «H» или «W» разделяют два согласных, которые имеют одинаковый код soundex, согласный справа не закодирован. Пример:
* Ashcraft кодируется 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
код достаточно делает то, что просят, я просто не знаю, как закодировать три правила. Вот где мне нужна помощь. Таким образом, любая помощь приветствуется.
freakin полезно! – Matias
http://code.activestate.com/recipes/52213/ – Peter
Обратите внимание, что домашнее задание говорит, что хороший дизайн будет использовать функции. Этот рецепт не получил бы хорошего качества в этой конкретной домашней работе ... :-) Тем не менее, этот рецепт, по-видимому, возвращает правильные ответы и может быть полезен для проверки правильности кода домашней работы. – steveha