首页 > 解决方案 > 将全名输入转换为姓氏+首字母

问题描述

用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]))

标签: python

解决方案


我会跳过字典(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']}"

推荐阅读