【发布时间】:2019-05-30 17:20:59
【问题描述】:
我开始学习 Python 并查看了以下网站:https://www.w3resource.com/python-exercises/string/ 我在 #4 上工作,即“编写一个 Python 程序以从给定字符串中获取一个字符串,其中所有出现的第一个字符都已更改为 '$',但第一个字符本身除外。”
str="restart"
char=str[0]
print(char)
strcpy=str
i=1
for i in range(len(strcpy)):
print(strcpy[i], "\n")
if strcpy[i] is char:
strcpy=strcpy.replace(strcpy[i], '$')
print(strcpy)
我希望“resta$t”,但实际结果是:$esta$t
感谢您的帮助!
【问题讨论】:
-
字符串是不可变的,所以
strcpy.replace不会改变strcpy,它会返回一个新的str对象。你需要strcpy = strcpy.replace...。另外,我会避免使用诸如str之类的内置变量名 -
我认为这不能解决您的问题,但风格提示:
is不应该用于执行相等检查。如果您不确定is是否适合解决某个问题,99% 的情况不是。 -
要搭载@Kevin 的评论,这将适用于某些对象,例如字符串或int,但尝试
a, b = [], []; a is b之类的东西,你会得到False,即使a==b是True -
谢谢! strcpy=strcpy.replace(strcpy[i], '$') 现在可以工作了。但是,我得到以下输出: $esta$t 我不明白这一点,因为 for 循环应该跳过第一个字符(在位置 0) str="restart" char=str[0] print(char) strcpy=str i= 1 for i in range(1,len(strcpy)): print(strcpy[i], "\n") if strcpy[i] is char: strcpy=strcpy.replace(strcpy[i], '$') print (strcpy)
-
@pythonlearner 那是因为你实际上并没有跳过第一个字符。您使用
for循环重新分配i。但即使您确实跳过了,str.replace也会替换所有出现的字符,或者如果指定了前 n 次出现。