1

我正在编写一个函数,它应该接受字符串输入并返回字符串,每个单词的每个首字母都作为大写字母,我已经在一定程度上实现了这一点。

我的代码:

string = input("Please Enter A string:")

def capitalize_words(string):
    split = string.split()

    letter1 = ''
    letter2 = ''
    letter3 = ''

    str1 = split[0]
    str2 = split[1]
    str3 = split[2]

    for i in str1:
        if i in str1[0]:
            first = i.upper()
        else:
            letter1 = letter1 + i
            string1 = (first+letter1)

    for i in str2:
        if i in str2[0]:
            first = i.upper()
        else:
            letter2 = letter2 + i
            string2 = (first+letter2)

    for i in str3:
        if i in str3[0]:
            first = i.upper()
        else:
            letter3 = letter3 + i
            string3 = (first+letter3)

    result = string1+' '+string2+' '+string3
    return result


func = capitalize_words(string)
print(func)

输入:

Please Enter A string:herp derp sherp

输出:

Herp Derp Sherp

然而,这是非常不灵活的,因为我只能输入 3 个带有空格的单词,这使得程序非常原始。我希望能够输入任何内容并获得所需的结果,即每个单词的第一个字母都是大写字母,无论我输入多少个单词。

我担心我的技能是我所能得到的,如果可能的话,请你改进我的程序。

4

4 回答 4

6
>>> print(raw_input('Please Enter A string: ').title())
Please Enter A string: herp derp sherp
Herp Derp Sherp
于 2013-05-15T09:46:14.607 回答
3

用于str.title()一次性实现您想要的。

但是要处理一个句子中的单词,使用循环而不是一系列局部变量;这是一个与您对任意数量的单词执行相同操作的版本:

for i, word in enumerate(split):
    split[i] = word[0].upper() + word[1:]

result = ' '.join(split)

我也使用字符串切片来选择第一个字符,以及除第一个字符之外的所有字符。注意使用enumerate()给我们一个计数器,我们可以split直接替换列表中的单词。

于 2013-05-15T09:47:28.633 回答
2

另一种方法是使用re.sub例如:

re.sub(r'\b.', lambda c: c.group().upper(), 'herp derp sherp and co.')
# 'Herp Derp Sherp And Co.'
于 2013-05-15T10:00:29.620 回答
1

您可以将其写成单行生成器表达式:

def upper_case(text):
    return ' '.join(w[0].upper() + w[1:] for w in text.split())

请注意,此函数在单个字母单词上失败,并用单个空格字符替换任何空格。

将此用作

In [1]: upper_case(input('Please Enter A string: '))
Please Enter A string: hello world
Out[1]: 'Hello World'
于 2013-05-15T09:50:36.943 回答