如何在Python中将字符串的一部分转换为小写?

0 投票
3 回答
4296 浏览
提问于 2025-04-28 16:35

我想把一段大约有一段文字长度的字符串中,所有不是完全大写的单词都变成小写。比如说,“The QUICK brown fOx”经过这个函数处理后应该变成“the QUICK brown fox”。现在这个函数似乎没有改变任何东西,但它确实保留了那些完全大写的单词。我该怎么把字符串中的一个单词变成小写,并把它返回到这个字符串里呢?

def AllCaps(string):
for word in string.split(' '):
    if word.isupper()==True:
        pass
    else:
        word = word.lower()
print(string)
暂无标签

3 个回答

0

如果一个单词是全大写的,使用 x.isupper() 会返回真(True),否则就把它转换成小写再连接起来:

def All_caps(s):
    return " ".join([x if x.isupper() else x.lower() for x in s.split() ])

In [34]: all_caps("The QUICK brown fOx")#
Out[34]: 'the QUICK brown fox'

最好不要把变量命名为字符串(string),因为这是一个内置模块。此外,word.isupper()==True 可以简化为 if word.isupper(),两者是一样的。

一般来说,使用 split() 时不加任何参数,可以根据任意数量的空白字符来分割字符串,否则有时你可能得不到预期的结果:

In [5]: s= "foo    bar"

In [6]: s.split(" ")
Out[6]: ['foo', '', '', '', 'bar']


In [7]: s.split()
Out[7]: ['foo', 'bar']
1

你现在的解决方案有点效果,但你把结果给丢掉了。你应该把结果加到一个不同的字符串里,然后再打印这个字符串。比如:

def allCaps(string):
    newString = ''
    for word in string.split(' '):
        if word.isupper()==True:
            newString += word + ' '
        else:
            newString += word.lower() + ' '
    print(newString)

allCaps('The QUICK brown fOx')
2

你现在的代码只是重新绑定了 word 这个变量,也就是说它现在保存的是 'fox' 而不是 'fOx'。这对原来的 string 变量没有任何影响。

你可以在获取每个单词的时候直接打印出来:

for word in string.split(' '):
    # your existing code
    print(word, end=' ')

或者,可能更好的方法是把所有的单词放到一个列表里,然后再把它们合并成一个字符串,最后打印出来:

words = []
for word in string.split(' '):
    # your existing code
    words.append(word)
print(' '.join(words))

撰写回答