python - 将全名输入转换为姓氏+首字母
问题描述
用python编写一个程序,其输入为:
名中间名姓
其输出是:
姓氏,firstInitial.middleInitial。
例如:如果输入是:
Pat Silly Doe
输出是:
Doe, P.S.
如果输入具有以下形式:
firstName lastName
输出是:
lastName, firstInitial.
例如:如果输入是:
Julia Clark
输出是:
Clark, J.
全部不使用 if then 语句。
这是我目前所拥有的,适用于三个名字,但不适用于两个名字。
user_name = input(' ').split()
print('{}, {}.{}.'.format(user_name[2], user_name[0][0], user_name[1][0]))
解决方案
我会跳过字典(d),但这似乎是你的要求:
def initials(a):
return ''.join(map(lambda s: s[0] + '.', a))
def abbreviate(s):
l = s.split()
d = {'lastName': l[-1], 'initials': initials(l[0:-1])}
return '{}, {}'.format(d['lastName'], d['initials'])
for n in ('Pat Silly Doe', 'Julia Clark'):
print(abbreviate(n))
这将为您提供输出:
Doe, P.S
Clark, J.
这是一个更高级的版本,zip()
用于组合键和值并转换为字典dict()
:
def abbreviate(s):
l = s.rsplit(maxsplit=1)
d = dict(
zip(
('lastName', 'initials'),
(
l[1],
''.join(map(lambda s2: s2[0] + '.', l[0].split()))
)
)
)
return f"{d['lastName']}, {d['initials']}"
推荐阅读
- apache-spark - 我的哪个 Databricks 笔记本使用集群节点?
- javascript - Javascript 不能用 async 和 promise 覆盖 window.confirm
- java - 关于 Project Reactor 的 flatMap 中的线程的困惑
- android-studio - java - Android Studio build.gradle:无法解决:com.android.support:appcompat-v7:8
- r - 删除列标签的背景颜色,同时保持绘图背景颜色 ggpairs
- c# - .net 框架 (WPF) 引用的依赖关系
- c# - ASP.NET / WCF / IIS 中静态变量的范围是什么?
- macos - 如何使用父文件夹中的数据批量“触摸”子文件夹中的文件
- node.js - POST 请求适用于 Postman 但不适用于 JS
- c# - 如何在会话过期后强制客户端 (RP) 注销用户