美国人口普查局使用名为“soundex”的特殊编码来查找关于某人的信息。 soundex是基于姓氏的方式而不是拼写方式的姓氏编码(姓氏)。与SMITH和SMYTH不同的姓氏具有相同的代码并且一起归档。 soundex编码系统的开发使你可以找到一个姓氏,尽管它可能已被记录下各种拼写。Python中的Soundex算法(作业帮助请求)
在本实验中,您将设计,编码和记录一个程序,该程序在输入姓氏时会生成soundex代码。用户将被提示输入姓氏,程序应输出相应的代码。
探测法的基本编码规则
姓氏的每一个同音编码由字母和三个数字。所用的字母总是姓氏的第一个字母。根据下面显示的soundex指南将这些数字分配给姓氏的其余字母。如果需要的话,在最后添加零以始终产生一个四字符代码。额外的信件被忽视。
的Soundex编码指南
探测法分配关于各种辅音的数。声音相似的辅音被赋予相同的编号:
编号辅音
1 B,F,P,V 2 C,G,J,K,Q,S,X,Z 3 d,T 4升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,忽略与C相同,S忽略与C相同,5代表添加的N,0)。
规则3.辅音分隔符
3.a.如果元音(A,E,I,O,U)将两个具有相同soundex编码的辅音分开,则编码元音右侧的辅音。例如:
Tymczak编码为T-522(T,5代表M,2代表C,Z被忽略(参见上面的“并排”规则),2代表K)。由于元音“A”将Z和K分开,所以K被编码。 3.b.如果“H”或“W”分开具有相同soundex编码的两个辅音,则右边的辅音不被编码。例如:
* Ashcraft编码为A261(A,2代表S,C忽略,因为与S相同,其中H代表中间值,6代表R代表,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
足够做的事情是问,我只是不知道如何将三个规则进行编码。那是我需要帮助的地方。所以,任何帮助表示赞赏。
2009-10-26
Josh
+0
我帮助澄清标题;-) –
2009-10-26 17:46:55
+3
我不是读你的整个家庭作业。用输入的内容和你想要的输出重新发布。 –
2009-10-26 17:47:29
+6
他设置了整个场景,并寻求如何继续前进的帮助。他在NO POINT要求回答。如果他重新发布要求说明输入和输出,那么应该关闭它。这是应该如何问一个作业问题的一个很好的例子! –
2009-10-26 17:50:39