用Python输入一个人名,判断输入的姓名是否是姓赵

Python014

用Python输入一个人名,判断输入的姓名是否是姓赵,第1张

详情如下。

python需要解析一个名字并找到以下信息:名字

FirstInitial(如果员工的名字缩写为D.J.,请使用两个首字母)

姓氏(包括员工是否有后缀,如Jr.或III.)

正在使用的界面:

输入:

names=["D.J.RichiesIII","JohnDoe","A.J.HardieJr."]

fornameinnames:

printparse_name(name)

预期产出:

{'FirstName':'D.J.','FirstInitial':'D.J.','LastName':'RichiesIII'}

{'FirstName':'John','FirstInitial':'J.','LastName':'Doe'}

{'FirstName':'A.J.','FirstInitial':'A.J.','LastName':'HardieJr.'}

先收集常见姓氏列表,获取姓名的第一个字,然后在姓氏列表中匹配,如果找到那么姓氏就是这个字,如果没找到就尝试姓名前两个字,如果还没找到就尝试更多字(当然中国姓氏一般就两字,我还没见过两字以上的姓)或者手动辨别姓氏,然后把姓氏补充进列表。这种思路的问题在于复合姓可能会出问题,比如”司“和”司马“,脚本识别出的姓会是”司“。#!/usr/bin/env python# -*- coding: utf-8 -*-# Python 版本需要为 3.5 以上first_names = ('李', '王', '司', '司马')def name_parser(name, first_name_count=1):"""分析姓名,返回姓和名的元组:param str name: 姓名:param int first_name_count: 姓氏长度,默认为1:return: 姓和名的元组,如果没分析成功就返回空元组:rtype: tuple"""if name[0:first_name_count] in first_names:return (name[0:first_name_count], name[first_name_count:])else:return ()if __name__ == '__main__':# name.txt 需要为 UTF-8 编码,如果为其他编码,自行优化处理with open('name.txt', 'r', encoding='utf-8') as f:for i in f:name = i.rstrip('\n')# 最多尝试两字的姓for n in range(1, 3):s = name_parser(name, n)if s:print('{} 的姓氏为: {},名字为: {}.'.format(name, s[0], s[1]))breakelse:print('未分析出 {} 的姓氏和名字,可能需要补充姓氏列表.'.format(name))