Python 比较两个字符(在字符串中)如何工作

How does comparing two chars (within a string) work in Python

我开始学习 Python 并查看了以下网站:https://www.w3resource.com/python-exercises/string/ 我正在处理 #4,即 "Write a Python program to get a string from a given string where all occurrences of its first char have been changed to '$', except the first char itself."

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

感谢您的帮助!

有两个问题,第一,你没有在你认为的地方开始迭代:

i = 1 # great, i is 1
for i in range(5):
    print(i)
0
1
2
3
4

i 已被跟踪循环的值覆盖。

其次,is不代表价值等价。这是为 == 运算符保留的。更简单的类型,如 intstr 可以使 is 看起来像这种方式,但其他类型不会这样:

a, b = 5, 5

a is b
True

a, b = "5", "5"
a is b
True

a==b
True

### This doesn't work
a, b = [], []

a is b
False

a == b
True

正如@Kevin 在评论中指出的那样,99% 的情况下,is 不是您想要的运算符。

就您的代码而言,str.replace 将替换第二个 arg 提供的参数的所有实例,除非您给它一个可选数量的实例来替换。为避免替换第一个字符,单独获取第一个字符,如 val = somestring[0],然后使用切片替换其余字符,无需迭代:

somestr = 'restart' # don't use str as a variable name

val = somestr[0] # val is 'r'

# somestr[1:] gives 'estart'
x = somestr[1:].replace(val, '$')

print(val+x)
# resta$t

如果您仍想迭代,也可以在切片上进行迭代:

# collect your letters into a list
letters = []
char = somestr[0]

for letter in somestr[1:]: # No need to track an index here
    if letter == char: # don't use is, use == for value comparison 
       letter = '$' # change letter to a different value if it is equal to char
    letters.append(letter)

# Then use join to concatenate back to a string
print(char + ''.join(letters))
# resta$t

您的代码需要修改。

修改您的代码,如下所示。

strcpy="restart"

i=1
for i in range(len(strcpy)):
   strcpy=strcpy.replace(strcpy[0], '$')[:]
print(strcpy)
# $esta$t

此外,在 Python 中编写代码的最佳做法是使用 Function。您可以按照下面给出的方式修改您的代码,或者您可以使用此功能。

def charreplace(s):
   return s.replace(s[0],'$')[:]

charreplace("restart")
#'$esta$t'

希望这对您有所帮助。