Podría usar algo de ayuda con esta codificación soundex

La oficina de censos de EE. UU. Utiliza una codificación especial llamada "soundex" para localizar información sobre una persona. El soundex es una codificación de apellidos (apellidos) basada en la forma en que suena un apellido en lugar de la forma en que se escribe. Los apellidos que suenan igual, pero están escritos de manera diferente, como SMITH y SMYTH, tienen el mismo código y se archivan juntos. El sistema de codificación de soundex fue desarrollado para que pueda encontrar un apellido a pesar de que puede haber sido registrado en varias ortografías.

En esta práctica de laboratorio, diseñará, codificará y documentará un programa que produce el código soundex cuando se ingresa con un apellido. A un usuario se le solicitará un apellido, y el programa debe generar el código correspondiente.

Reglas básicas de codificación de Soundex

Cada codificación soundex de un apellido consiste en una letra y tres números. La letra utilizada es siempre la primera letra del apellido. Los números se asignan a las letras restantes del apellido de acuerdo con la guía de soundex que se muestra a continuación. Los ceros se agregan al final si es necesario para producir siempre un código de cuatro caracteres. Las cartas adicionales son ignoradas.

Guía de codificación Soundex

Soundex asigna un número para varias consonantes. A las consonantes que suenan igual se les asigna el mismo número:

Número de consonantes

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 ignora las letras A, E, I, O, U, H, W y Y.

Hay 3 reglas adicionales de codificación de Soundex que se siguen. Un buen diseño de programa los implementaría cada uno como una o más funciones separadas.

Regla 1. Nombres con letras dobles.

Si el apellido tiene letras dobles, deben tratarse como una sola letra. Por ejemplo:

Gutiérrez está codificado G362 (G, 3 para la T, 6 para la primera R, la segunda R se ignora, 2 para la Z).

Regla 2. Nombres con letras lado a lado que tienen el mismo número de código Soundex

Si el apellido tiene letras diferentes lado a lado que tienen el mismo número en la guía de codificación soundex, deben tratarse como una sola letra. Ejemplos:

Pfister se codifica como P236 (P, F se ignora, ya que se considera lo mismo que P, 2 para la S, 3 para la T, 6 para la R).

Jackson está codificado como J250 (J, 2 para C, K se ignora lo mismo que C, S se ignora lo mismo que C, 5 para la N, 0 agregado).

Regla 3. Separadores de consonantes.

3.a. Si una vocal (A, E, I, O, U) separa dos consonantes que tienen el mismo código soundex, se codifica la consonante a la derecha de la vocal. Ejemplo:

Tymczak está codificado como T-522 (T, 5 para M, 2 para C, Z ignorado (ver la regla "Lado a lado" más arriba), 2 para K). Dado que la vocal "A" separa la Z y la K, la K está codificada.

3.b. Si "H" o "W" separan dos consonantes que tienen el mismo código soundex, la consonante de la derecha no está codificada. Ejemplo:

* Ashcraft está codificado A261 (A, 2 para S, C se ignora, ya que S con H en medio, 6 para R, 1 para F). No está codificado A226.

Hasta ahora este es mi 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

El código hace suficientemente lo que se le pide, simplemente no estoy seguro de cómo codificar las tres reglas. Ahí es donde necesito ayuda. Asi que se agradece cualquier ayuda.

Respuestas a la pregunta(2)

Su respuesta a la pregunta