python 指数资本化

vs91vp4v  于 2023-02-15  发布在  Python
关注(0)|答案(1)|浏览(133)

我想创建一个函数,根据提供的数组将字符串大写。我当前的函数有两个参数:你想修改的字符串和一个数组,它对应于你想修改的字母。我的函数看起来是这样的:

def capitalize(s, ind):
    for i in ind:
        try:
            s = s.replace(s[i], s[i].upper())
        except IndexError:
            print("Sorry, index is not range!")
    return s

这个函数一开始似乎可以工作,当我尝试了一些例子,如:

capitalize("abc",[1,2])
#Output: aBC

然而,我无法解释为什么这个例子失败了:

capitalize("abracadabra",[2,6,9,10])
#Output: AbRAcADAbRA - should be abRAcADAbRA

为什么我的第一个字母突然变成大写了?任何帮助都将不胜感激。

qv7cva1a

qv7cva1a1#

str.replace替换它找到的第一个匹配项,因此s.replace(s[10], s[10].upper())(它是a)不会替换索引号为10的a,而是替换它在字符串中找到的第一个a
而是将字符串转换为列表:

import sys

def capitalize(s, ind):
    split_s = list(s)
    for i in ind:
        try:
            split_s[i] = split_s[i].upper()
        except IndexError:
            print(f"Sorry, index is not in range! ({i})", file=sys.stderr)
    return "".join(split_s)

print(capitalize("abracadabra",[2,6,9,10,50]))

输出:
对不起,索引不在范围内!(50)
阿布拉卡

相关问题