如何让Python姓名格式转换程序兼容无中间名输入?
姓名格式转换:兼容有无中间名的场景
我需要实现一个姓名格式转换功能,把「First Middle Last」格式的全名转换成「Last Name, X.Y」格式(X是名字首字母,Y是中间名首字母),同时要兼容无中间名的输入场景:
- 输入「James Paul McCartney」时输出「McCartney, J.P.」
- 输入「Paul McCartney」时输出「McCartney, P.」
现有Python代码只能处理包含中间名的情况,无法兼容无中间名的输入:
full_name = input() full_name2 = full_name.split(' ') first_name = full_name2[0] middle_name = full_name2[1] last_name = full_name2[2] first_name2 = list(first_name) middle_name2 = list(middle_name) first_inital = first_name2[0] middle_inital = middle_name2[0] print(last_name + ', ' + first_inital, '.' + middle_inital, + '.')
解决方案
核心逻辑是:不管输入的名字包含几个部分,最后一个元素始终是姓氏,前面的所有元素都是名字(含中间名)。基于这个逻辑可以写出兼容两种场景的代码:
full_name = input().strip() name_parts = full_name.split() # 提取姓氏(拆分后的最后一个部分) last_name = name_parts[-1] # 提取所有名字部分(除姓氏外的前n个部分) given_names = name_parts[:-1] # 生成首字母串:每个名字首字母大写,用点连接,最后补一个结尾的点 initials = '.'.join([name[0].upper() for name in given_names]) + '.' # 格式化输出结果 print(f"{last_name}, {initials}")
代码说明
split()默认按任意空白字符拆分(包括多个连续空格),比split(' ')更鲁棒,能处理输入中不小心多打空格的情况name_parts[-1]直接取列表最后一个元素作为姓氏,不管前面是1个还是多个名字- 用列表推导式遍历所有名字部分,提取每个名字的首字母并转大写,再用
.连接,最后补一个结尾的点 - 使用f-string格式化输出,语法简洁易读
测试两个场景:
- 输入
James Paul McCartney→ 输出McCartney, J.P. - 输入
Paul McCartney→ 输出McCartney, P.
内容的提问来源于stack exchange,提问作者GriffinsTale
相关产品推荐
相关产品推荐

