米国国勢調査局は、「soundex」と呼ばれる特別なエンコードを使用して、個人に関する情報を見つけます。soundex は、姓の綴りではなく、発音に基づいた姓 (姓) のエンコーディングです。SMITH と SMYTH のように、同じように聞こえるが綴りが異なる姓は、同じコードを持ち、一緒にファイルされます。soundex コーディング システムは、姓がさまざまな綴りで記録されている場合でも姓を見つけることができるように開発されました。
このラボでは、姓を入力すると soundex コードを生成するプログラムを設計、コーディング、および文書化します。ユーザーは姓の入力を求められ、プログラムは対応するコードを出力する必要があります。
基本的な Soundex コーディング規則
姓のすべての soundex エンコーディングは、文字と 3 つの数字で構成されます。使用される文字は常に姓の最初の文字です。以下に示すsoundexガイドに従って、姓の残りの文字に番号が割り当てられます。常に 4 文字のコードを生成するために、必要に応じて末尾にゼロが追加されます。追加の文字は無視されます。
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 つ以上の個別の関数として実装します。
ルール 1. 2 文字の名前
姓に二重文字が含まれている場合は、それらを 1 文字として扱う必要があります。例えば:
- Gutierrez は G362 にコード化されています (G、T は 3、最初の R は 6、2 番目の R は無視、Z は 2)。
ルール 2. 同じ Soundex コード番号を持つ文字が並んでいる名前
姓に異なる文字が並んでいて、soundex コーディング ガイドでは同じ数字になっている場合、それらは 1 つの文字として扱われるべきです。例:
Pfister は P236 としてコード化されます (P、F は P と同じと見なされるため無視されます。S は 2、T は 3、R は 6)。
Jackson は J250 としてコード化されます (J、C は 2、K は C と同じように無視され、S は C と同じように無視され、N は 5、0 が追加されます)。
ルール 3. 子音区切り
3.a. 母音 (A、E、I、O、U) が同じ soundex コードを持つ 2 つの子音を区切る場合、母音の右側の子音がコード化されます。例:
- Tymczak は T-522 としてコード化されています (T、M の場合は 5、C の場合は 2、Z は無視されます (上記の「Side-by-Side」ルールを参照)、K の場合は 2)。母音「A」はZとKを分離するため、Kがコード化されます。
3.b. 「H」または「W」が同じ soundex コードを持つ 2 つの子音を区切る場合、右側の子音はコード化されません。例:
*Ashcraft は A261 とコード化されています (A、S は 2、C は S と同じで無視され、その間に H があり、R は 6、F は 1)。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
コードは要求されたことを十分に実行しますが、3 つのルールをコーディングする方法がわかりません。それが私が助けを必要としているところです。だから、どんな助けも大歓迎です。