Подстановка экземпляра символа, кроме первого, во входной строке - PullRequest
0 голосов
/ 22 апреля 2020

Поскольку строки в 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

Ответы [ 3 ]

0 голосов
/ 22 апреля 2020
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 голосов
/ 22 апреля 2020

Попробуйте:

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

Несколько замечаний по поводу кода вопроса:

  • Вы можете использовать некоторое время l oop, как показано, вместо рекурсии , чтобы повторить ввод. Если вы действительно хотите использовать рекурсию, вы должны добавить return после вызова modify().
  • Если вы хотите преобразовать строку в список символов, вы можете использовать strlist = list(varstr). Затем вы можете изменить его и вернуться к строке, используя ''.join(strlist)
0 голосов
/ 22 апреля 2020

Вы можете сделать следующее:

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

Это разбивает первое вхождение char и объединяет токены обратно после "char.split ting и '$'.join ing" их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...