如何仅将字符串中特定索引处的特定字母更改为大写/小写

时间:2014-10-05 19:25:46

标签: python string

以下是代码:

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'。

4 个答案:

答案 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)