我正在编写一个函数,它应该接受一个字符串输入并返回每个单词的每个首字母作为大写字母的字符串,我已经达到了一定程度。
我的代码:
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个单词而不是更少,这就是一个相当原始的程序。无论我输入多少单词,我都希望能够输入任何内容并获得每个单词的第一个字母所需的结果为大写字母。
我担心我的技能,这是我能够得到的,如果可能的话,请你改进我的计划。
答案 0 :(得分:6)
>>> print(raw_input('Please Enter A string: ').title())
Please Enter A string: herp derp sherp
Herp Derp Sherp
答案 1 :(得分:3)
使用str.title()
一次性实现您的目标。
但要处理句子中的单词,请使用循环而不是一系列局部变量;这是一个与你正在为任意数量的单词做的相同的版本:
for i, word in enumerate(split):
split[i] = word[0].upper() + word[1:]
result = ' '.join(split)
我也使用字符串切片来选择第一个字符,以及除字的第一个字符之外的所有字符。请注意使用enumerate()
为我们提供一个计数器,我们可以直接替换split
列表中的单词。
答案 2 :(得分:2)
另一种方法是使用re.sub
,例如:
re.sub(r'\b.', lambda c: c.group().upper(), 'herp derp sherp and co.')
# 'Herp Derp Sherp And Co.'
答案 3 :(得分: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'