在Python中将字符串中每个单词的首字母大写。

3

在Python中有一个函数存在一些问题,该函数应该返回字符串中每个单词的首字母大写且所有其他字母小写:

def titleize(phrase):
    split_phrase = phrase.split()

    for word in split_phrase:
        word.capitalize()

    return ' '.join(split_phrase)

titleize('oNLy cAPITALIZe fIRSt') -> oNLy cAPITALIZe fIRSt

显然问题出在对短语进行循环(我认为),它被分裂并且我怀疑它不是在变异,而是创建了一些新的东西,但我卡在试图修复它。


2
问题在于当你执行 word.capitalize() 时没有保存它,因此 split_phrase 没有被更新,但是请参考下面如何使用内置的 str.title 函数。 - astrochun
2个回答

12
我可以建议使用内置的str.title()函数吗?
def titleize(phrase):
    capitalize_first = phrase.title()
    return capitalize_first
    
print(titleize('oNLy cAPITALIZe fIRSt'))

输出:

Only Capitalize First

3
你没有把结果赋值给任何变量 -- split_phrase 变量在任何时候都没有被改变。
你可以像@pythonenthusiast建议的那样使用str.title(),或者使用列表推导式来简化你当前的方法:
def titleize(phrase):
    return ' '.join([word.capitalize() for word in phrase.split()])

您原始代码的已纠正版本可能看起来像这样:

def titleize(phrase):
    split_phrase = phrase.split()
    result = []
    for word in split_phrase:
        result.append(word.capitalize())
    return ' '.join(result)

在此,创建了一个新的result列表,在每次迭代中,将更改后的单词附加到该列表中。最后,使用join方法将其连接并返回新的result列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接