以下是代码:
def upper_every_nth (s, n):
i = 0
while len (s) > (i * (0 + n)) :
character = s[i * (0 + n)]
s = s.replace(character, character.upper(), 1)
i = i + 1
return (s)
我希望它返回一个与s相同的字符串,除了每个第n个字符(从第0位开始)都是大写的。
>>> upper_every_nth("cat", 2)
'CaT'
>>> upper_every_nth("hat", 3)
'Hat'
问题是我不能使用.replace方法,因为如果没有,它会替换字符串中所有出现的字母,只有第一次出现。
所以让我们说这个字符串是'鹿'。我想将'e'的第二次出现转换为大写。但是使用.replace方法,要么我得到'dEEr'或'dEer'。
答案 0 :(得分:2)
您需要使用索引。以下是如何使用字符k
替换字符s
的第ch
个字符:
s = s[:k] + ch + s[k+1:]
要了解s[:k]
和s[k+1:]
的工作原理,请阅读Explain Python's slice notation。 +
简单地将几个字符串连接在一起。
答案 1 :(得分:0)
def upper_every_nth(word, n):
return ''.join(value if index%n else value.upper() for index, value in enumerate(word))
测试
>>> upper_every_nth('dictionary', 3)
'DicTioNarY'
要更明确地解决此问题,您可以使用for
循环
def upper_every_nth(word, n):
newWord = ''
for index, value in enumerate(word):
if index % n == 0:
newWord += value.upper()
else:
newWord += value
return newWord
答案 2 :(得分:0)
在2.x或3.x中,使用单字符字符串列表。在3.x中,您还可以使用bytearray:
#!/usr/local/cpython-3.4/bin/python3
'''Demonstrate capitalizing every nth letter of a word'''
def upper_every_nth_via_list(word, number):
'''Capitalize every nth letter of a word'''
new_word = []
for index, value in enumerate(word):
if index % number == 0:
new_word.append(value.upper())
else:
new_word.append(value)
return ''.join(new_word)
def upper(character):
'''convert character to uppercase if lowercase'''
if ord(b'a') <= character <= ord(b'z'):
character += ord(b'A') - ord(b'a')
return character
def upper_every_nth_via_bytearray(word, number):
'''Capitalize every nth letter of a word using a 3.x byte string'''
new_word = word[:]
for index, value in enumerate(new_word):
if index % number == 0:
new_word[index] = upper(value)
return new_word
def main():
'''Main function'''
string = upper_every_nth_via_list('abcdefgabcdefggfedcba', 3)
print('{}\n'.format(string))
input_bytearray = bytearray(b'abcdefgabcdefggfedcba')
bytearray_string = upper_every_nth_via_bytearray(input_bytearray, 3)
print('{}\n'.format(bytearray_string))
main()
答案 3 :(得分:0)
i = 0
word = ''
while len(s) > i:
if i % n == 0:
word = word + s[i].upper()
i +=1
else:
word = word + s[i]
i +=1
return (word)