如何在Python中将字符串的一部分转换为小写?
我想把一段大约有一段文字长度的字符串中,所有不是完全大写的单词都变成小写。比如说,“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))