Poderia usar alguma ajuda com esta codificação soundex

O departamento de recenseamento dos EUA usa uma codificação especial chamada "soundex" para localizar informações sobre uma pessoa. O soundex é uma codificação de sobrenomes (sobrenomes) com base na maneira como um sobrenome soa, e não na forma como é soletrado. Os sobrenomes que soam iguais, mas são escritos de forma diferente, como SMITH e SMYTH, têm o mesmo código e são arquivados juntos. O sistema de codificação soundex foi desenvolvido para que você possa encontrar um sobrenome mesmo que possa ter sido gravado sob várias grafias.

Neste laboratório, você projetará, codificará e documentará um programa que produza o código soundex ao inserir um sobrenome. Um usuário será solicitado a fornecer um sobrenome e o programa deverá exibir o código correspondente.

Regras Básicas de Codificação Soundex

Toda codificação soundex de um sobrenome consiste em uma letra e três números. A letra usada é sempre a primeira letra do sobrenome. Os números são atribuídos às letras restantes do sobrenome de acordo com o guia soundex mostrado abaixo. Zeros são adicionados no final, se necessário, para produzir sempre um código de quatro caracteres. Letras adicionais são desconsideradas.

Guia de codificação Soundex

Soundex atribui um número para várias consoantes. As consoantes que soam iguais recebem o mesmo número:

Número de consoantes

1B, F, P, V2C, G, J, K, Q, S, X, Z3D, T4L5M, N6R

O Soundex desconsidera as letras A, E, I, O, U, H, W e Y.

Existem 3 regras adicionais de codificação Soundex que são seguidas. Um bom projeto de programa implementaria cada um deles como uma ou mais funções separadas.

Regra 1. Nomes com letras duplas

Se o sobrenome tiver letras duplas, elas devem ser tratadas como uma letra. Por exemplo:

Gutierrez é codificado G362 (G, 3 para o T, 6 para o primeiro R, segundo R ignorado, 2 para o Z).

Regra 2. Nomes com Letras Lado a Lado que Têm o Mesmo Número de Código Soundex

Se o sobrenome tiver letras diferentes lado a lado que tenham o mesmo número no guia de codificação soundex, elas devem ser tratadas como uma letra. Exemplos:

Pfister é codificado como P236 (P, F ignorado, uma vez que é considerado o mesmo que P, 2 para o S, 3 para o T, 6 para o R).

Jackson é codificado como J250 (J, 2 para o C, K ignorado mesmo como C, S ignorado mesmo que C, 5 para o N, 0 adicionado).

Regra 3. Separadores Consoantes

3.a. Se uma vogal (A, E, I, O, U) separar duas consoantes que tenham o mesmo código soundex, a consoante à direita da vogal é codificada. Exemplo:

Tymczak é codificado como T-522 (T, 5 para M, 2 para C, Z ignorado (ver regra "Side-by-Side" acima), 2 para o K). Como a vogal "A" separa o Z e o K, o K é codificado.

3.b. Se "H" ou "W" separam duas consoantes que têm o mesmo código soundex, a consoante à direita não é codificada. Exemplo:

* Ashcraft é codificada como A261 (A, 2 para o S, C é ignorada desde o mesmo que S com H no meio, 6 para o R, 1 para o F). Não está codificado como A226.

Até agora este é o meu código:

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

O código faz o que é pedido, não sei como codificar as três regras. É aí que preciso de ajuda. Portanto, qualquer ajuda é apreciada.

questionAnswers(2)

yourAnswerToTheQuestion