我刚开始学习Python并为自己创造了一些我正在努力解决的任务......
所以,我正在处理使用字符串(通过索引访问字符串,更改等)的章节.
我的任务是 - 大写字符串的每个奇数字符.我在这里看到了解决方案:在Python中用字符串中的每个其他字母大写?
但我不喜欢它...想通过切片解决这个问题.所以我制作的是关注代码:
T = 'somesampletexthere'
R=""
for i in range(0, len(T[1::2])):
R+=T[::2][i].upper()+T[1::2][i].lower()
print R
Run Code Online (Sandbox Code Playgroud)
当有偶数个字符时,这个代码工作得很好,例如使用TESTTEXT但是当数字是奇数时,就像这里的例子一样,它将跳过最后一个字符(在本例中是E)
这是因为范围是直到len(T[1::2]))(偶数字符的长度),但如果我将尝试奇数字符的长度,len(T[::2]))我将得到错误:
IndexError: string index out of range
Run Code Online (Sandbox Code Playgroud)
逻辑上因为奇数字符的数量在1上总是更大(在具有奇数字符的文本的情况下).
所以,我的问题是 - 我怎么能抑制错误?因此,如果索引超出给定字符串的范围,Python只返回null或其他内容?
或使用切片的任务的任何其他解决方案?
您可以使用enumerate三元运算符来使用和测试奇数和偶数索引.然后join用来加入字符串:
>>> T = 'somesampletexthere'
>>> ''.join(x.upper() if i%2 else x.lower() for i, x in enumerate(T))
'sOmEsAmPlEtExThErE'
Run Code Online (Sandbox Code Playgroud)
您可以使用以下提供的外部计数器对象来处理空格itertools.count:
>>> from itertools import count
>>> c = count()
>>> T = 'some sample text here'
>>> ''.join(x if x.isspace() else (x.upper() if next(c)%2 else x.lower()) for x in T)
'sOmE sAmPlE tExT hErE'
Run Code Online (Sandbox Code Playgroud)