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

时间:2019-05-30 17:21:00

标签: python string-comparison

我开始学习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

谢谢您的帮助!

2 个答案:

答案 0 :(得分:0)

有两个问题,首先,您没有在您认为合适的地方开始迭代:

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

答案 1 :(得分:0)

您需要对代码进行一些修改。

按照以下说明修改代码。

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'

希望这会有所帮助。