Capitalized Word Function
我正在写一个函数,它应该接受一个字符串输入并返回每个单词的每个首字母作为大写字母的字符串,我已经达到了一定程度。
我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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) |
输入:
1 | Please Enter A string:herp derp sherp |
输出:
1 | Herp Derp Sherp |
然而,这是非常不灵活的,因为我只能用空格输入3个单词,而不是更少,这就是一个相当原始的程序。 无论我输入多少单词,我希望能够输入任何内容并获得每个单词的第一个字母的大写字母所需的结果。
我担心我的技能,这是我能够得到的,如果可能的话,请你改进我的计划。
1 2 3 | >>> print(raw_input('Please Enter A string: ').title()) Please Enter A string: herp derp sherp Herp Derp Sherp |
使用
但是要处理句子中的单词,请使用循环而不是一系列局部变量; 这是一个与你正在为任意数量的单词做的相同的版本:
1 2 3 4 | for i, word in enumerate(split): split[i] = word[0].upper() + word[1:] result = ' '.join(split) |
我也使用字符串切片来选择第一个字符,以及除字的第一个字符之外的所有字符。 注意使用
另一种方法是使用
1 2 | re.sub(r'\b.', lambda c: c.group().upper(), 'herp derp sherp and co.') # 'Herp Derp Sherp And Co.' |
你可以在一行生成器表达式中写这个:
1 2 | def upper_case(text): return ' '.join(w[0].upper() + w[1:] for w in text.split()) |
请注意,此函数在单个字母单词上失败,并用单个空格字符替换任何空格。
用它作为
1 2 3 | In [1]: upper_case(input('Please Enter A string: ')) Please Enter A string: hello world Out[1]: 'Hello World' |