
1. 题目考点
这道题主要考:
字符串索引、字符串不可变性、列表修改、字符串拼接、函数返回值、输入拆分。
它的核心不是复杂算法,而是让你理解:Python 里的字符串不能直接修改某一个位置的字符。
比如下面这样是不允许的:
s = "abracadabra"
s[5] = "k"
会报错,因为字符串是不可变类型。
2. 审题
题目要求:
给你一个字符串 string,再给你一个位置 position 和一个字符 character,把字符串中 position 这个索引位置上的字符替换成 character,然后返回修改后的字符串。
输入格式是:
第一行:
abracadabra
第二行:
5 k
表示:
string = "abracadabra"
position = 5
character = "k"
注意,Python 字符串索引从 0 开始,不是从 1 开始。
所以:
a b r a c a d a b r a
0 1 2 3 4 5 6 7 8 9 10
索引 5 位置上的字符是 "a",要改成 "k"。
结果就是:
abrackdabra
3. 思路提示
这题最关键的一句话是:字符串不能直接改,但列表可以改。
所以可以这样想:
第一步,把字符串变成列表。
"abracadabra"
变成:
['a', 'b', 'r', 'a', 'c', 'a', 'd', 'a', 'b', 'r', 'a']
第二步,修改列表中指定索引位置的元素。
把索引 5 的 "a" 改成 "k"。
第三步,再把列表重新拼成字符串。
这就是最适合初学者的做法。
4. 完整设计思路
这道题可以拆成 3 步:
第一步:把字符串转成列表
因为字符串不能修改单个字符,但是列表可以修改元素。
string_list = list(string)
第二步:修改指定位置
题目给了 position,表示要修改的位置;给了 character,表示新字符。
string_list[position] = character
第三步:把列表重新拼回字符串
列表不能直接作为答案返回,需要重新变成字符串。
new_string = ''.join(string_list)
这里的 ''.join(...) 的意思是:用空字符串作为连接符,把列表里的字符一个一个连起来。
5. 代码实现
def mutate_string(string, position, character):
string_list = list(string)
string_list[position] = character
new_string = ''.join(string_list)
return new_string
if __name__ == '__main__':
s = input()
i, c = input().split()
s_new = mutate_string(s, int(i), c)
print(s_new)
6. 模板代码解释
这几行是 HackerRank 常见的输入模板:
if __name__ == '__main__':
初学阶段可以先理解为:程序从这里开始正式运行。
s = input()
读取第一行字符串。
例如输入:
abracadabra
那么:
s = "abracadabra"
下一行:
i, c = input().split()
读取第二行,并用空格拆开。
例如输入:
5 k
经过 split() 之后变成:
["5", "k"]
所以:
i = "5"
c = "k"
注意,此时 i 是字符串 "5",不是整数 5。
所以调用函数时要写:
int(i)
把 "5" 转成整数 5。
7. 运行演示
输入:
abracadabra
5 k
程序执行过程:
s = "abracadabra"
i = "5"
c = "k"
调用函数:
mutate_string("abracadabra", 5, "k")
进入函数后:
string_list = list(string)
得到:
['a', 'b', 'r', 'a', 'c', 'a', 'd', 'a', 'b', 'r', 'a']
修改索引 5:
string_list[5] = "k"
得到:
['a', 'b', 'r', 'a', 'c', 'k', 'd', 'a', 'b', 'r', 'a']
再拼回字符串:
new_string = ''.join(string_list)
结果:
"abrackdabra"
最终输出:
abrackdabra
8. 另一种做法:字符串切片
除了转成列表,还可以用切片。
思路是:
原字符串 = 前半部分 + 新字符 + 后半部分
def mutate_string(string, position, character):
return string[:position] + character + string[position + 1:]
用样例解释:
string = "abracadabra"
position = 5
character = "k"
那么:
string[:5]
得到索引 5 之前的内容:
abrac
string[6:]
得到索引 5 后面的内容:
dabra
所以:
"abrac" + "k" + "dabra"
结果就是:
abrackdabra
不过对于初学者来说,建议先掌握“转列表再修改”的方法,因为它更直观。
9. 方法总结
这类题以后可以这样判断:
只要题目说“修改字符串中某个位置的字符”,你就要马上想到:
Python 字符串不能直接修改。
常见做法有两个:
| 方法 | 思路 | 适合程度 |
|---|---|---|
| 转列表再修改 | list() → 修改元素 → join() | 初学者最推荐 |
| 字符串切片 | 前半段 + 新字符 + 后半段 | 更简洁,但需要熟悉切片 |
记住一句话:
字符串不能原地改,列表可以原地改。
10. 同类型练习
请你尝试完成下面的小练习。
题目:
输入一个字符串、一个索引位置、一个新字符,把该位置的字符替换掉,并输出新字符串。
示例输入:
python
0 P
示例输出:
Python
提示:
先把 "python" 转成列表,再把索引 0 的字符改成 "P",最后用 ''.join() 拼回字符串。



