字母大写在每种情况下都不起作用

时间:2019-02-23 00:03:09

标签: python

几个月前我才刚刚开始学习python,所以我是这里的新手。我试图将字符串中每个单词的首字母大写。当输入是“ hello world”时(例如),它可以很好地工作,但是对于某些输入(例如“ i lovecoding”),它将返回此“ I Love CodIng”,对我而言这没有意义。有人可以向我解释为什么会这样吗?这是代码:

def LetterCapitalize(str):
    str = str.replace(str[0], str[0].upper())
    for i in range(len(str)):
        try:
            if str[i] == ' ':
                str = str.replace(str[i+1], str[i+1].upper())
            else:
                continue
        except IndexError:
            break
    return str

2 个答案:

答案 0 :(得分:1)

str.replace方法替换了给定主字符串中所有出现的给定子字符串,因此通过将i中的字母I替换为i love coding,它同时替换了两个{{字符串中的1}}。

由于字符串是不可变的,因此您可以将给定的字符串转换为一个字符列表,以便您可以遍历该列表,如果该字符位于字符串的开头或前面有空格,则将其替换,然后将最后列出一个字符串:

i

使def LetterCapitalize(s): l = list(s) for i, c in enumerate(l): if not i or l[i - 1] == ' ': l[i] = c.upper() return ''.join(l) 返回:

LetterCapitalize('i love coding')

答案 1 :(得分:0)

代码的问题是您的第一行, str = str.replace(str[0], str[0].upper())
在这里,您用大写字母替换了第一个字母,但在随后的所有字符串中也替换了该字母。

示例: LetterCapitalize("hello hoher")->'Hello HoHer'

您需要修改字符串中给定位置的单个字符,而不是替换所有出现的字母。您应该尝试使用字符串作为列表。这是一个有用的链接:Change one character in a string?