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
不代表价值等价。这是为 ==
运算符保留的。更简单的类型,如 int
和 str
可以使 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'
希望这对您有所帮助。
我开始学习 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
不代表价值等价。这是为 ==
运算符保留的。更简单的类型,如 int
和 str
可以使 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'
希望这对您有所帮助。