由于python中的字符串是不可改变的,我尝试了这个变通方法。我首先将字符串分解成它的字符组件, 把它们放在一个列表里. 然后,我在这个列表中循环,将我想修改的字符的第二次出现替换到目标字符中,最后部分当然是根据新的列表重新构建字符串。
def modify():
space = " "
# This is the input part
varstr = input("Insert a string to modify:\n> ")
if space in varstr:
print("Please insert a string without space")
modify()
varchar = input("Insert a SINGLE character to modify in $:\n> ")
if len(varstr) > 1:
print("Please insert a single character, without spaces")
counter = 0
liststr = []
stringout = ""
#Creating the list composed by the characters of the string
for i in varstr:
liststr.append(i)
#Looping through the string and substituting the character from its second occurence
for j in range(len(liststr)):
if counter >= 1 and liststr[j] == varchar:
liststr[j] = "$"
elif counter == 0 and liststr[j] == varchar:
counter += 1
for k in liststr:
stringout += k
return stringout
我的问题是:这段代码能不能做得更整洁一些?
编辑:样本输入可以是 "Google "和字符 "o"。那么样本输出将是
Go$gle
你可以这样做。
char = "a"
stri = "santaclaus"
char.join("$".join(s.split(char)) for s in stri.split(char, 1))
# 'sant$cl$us'
这在第一条就被拆开了 char
的发生,并在""之后将代币连接起来。char.split
婷婷和 '$'.join
ing "他们。
def modify():
while True:
varstr = input("Insert a string to modify:\n> ")
if ' ' in varstr:
print("Please insert a string without space")
else:
break
while True:
varchar = input("Insert a SINGLE character to modify in $:\n> ")
if len(varchar) > 1:
print("Please insert a single character, without spaces")
else:
break
return varstr[0] + varstr[1:].replace(varchar, '$')
试试这个。
def modify():
while True:
varstr = input("Insert a string to modify:\n> ")
if len(varstr) > 0 and ' ' not in varstr:
break
print("Please insert a string without space")
while True:
varchar = input("Insert a SINGLE character to modify in $:\n> ")
if len(varchar) == 1 and varchar != ' ':
break
print("Please insert a single character, without spaces")
first = varstr.find(varchar) + 1
varstr = varstr[:first] + varstr[first:].replace(varchar, "$")
return varstr
关于问题代码的几个要点:
return
之后 modify()
调用。strlist = list(varstr)
. 然后,你可以突变,并返回到字符串使用 ''.join(strlist)