替换输入字符串中除第一个字符外的其他字符的实例。

问题描述 投票:0回答:1

由于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
python string loops
1个回答
0
投票

你可以这样做。

char = "a"
stri = "santaclaus"
char.join("$".join(s.split(char)) for s in stri.split(char, 1))
# 'sant$cl$us'

这在第一条就被拆开了 char 的发生,并在""之后将代币连接起来。char.split婷婷和 '$'.joining "他们。


0
投票
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, '$')

0
投票

试试这个。

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

关于问题代码的几个要点:

  • 你可以使用如图所示的 while 循环,而不是递归,来重复输入。如果你真的想使用递归,你必须在代码中增加一个 return 之后 modify() 调用。
  • 如果你想把一个字符串转换为字符列表,你可以使用 strlist = list(varstr). 然后,你可以突变,并返回到字符串使用 ''.join(strlist)
© www.soinside.com 2019 - 2024. All rights reserved.