Рекурсивно удалить все числа в строке и вернуть обратную версию этой строки без номеров - PullRequest
0 голосов
/ 08 ноября 2019

Мне нужно рекурсивно удалить все числа из строки и затем вернуть перевернутую строку.

def remove_numbers_and_reverse(string):

if string == "":
    return string
elif string[-1].isdigit():
    string.replace(string[-1], "")
return string[-1] + remove_numbers_and_reverse(string[:-1])

Например, если на входе указано «bunny1234», то на выходе должно быть «ynnub». Но я получаю "4321ynnub".

"bunny1234" -> "ynnub"
"3434string" -> "gnirts"

Ответы [ 3 ]

1 голос
/ 08 ноября 2019

Для удаления номера попробуйте следующий подход:

1. используя join и isdigit

ini_string = "Test123ing127you"
print("initial string : ", ini_string) 
res = ''.join([i for i in ini_string if not i.isdigit()]) 
print("final string : ", res)

2. Используя перевод и цифры

from string import digits 
ini_string = "Test123ing127you"
remove_digits = str.maketrans('', '', digits) 
res = ini_string.translate(remove_digits) 
# printing result 
print("final string : ", res) 

3. Использование фильтра и лямбды

ini_string = "amol23bais"
res = "".join(filter(lambda x: not x.isdigit(), ini_string)) 
# printing result 
print("final string : ", str(res))
0 голосов
/ 08 ноября 2019

Другие люди ответили на это, но также могли бы добавить и мой пример.

def remove_numbers_and_reverse(my_string):
  if not my_string:
    return my_string
  else:
    for letter in my_string:
      if letter.isdigit():
        continue
      output = letter + output
  return output

Вывод:

[user@machine test-dir]$ python3
Python 3.6.9 (default, Aug 15 2019, 16:59:35)
>>> import test
>>> test.remove_numbers_and_reverse("bunny1234")
'ynnub'
>>> test.remove_numbers_and_reverse("3434string")
'gnirts'
>>> test.remove_numbers_and_reverse("3434string123123morestring")
'gnirtseromgnirts'
>>> test.remove_numbers_and_reverse("")
''
>>>
0 голосов
/ 08 ноября 2019

Проблема с вашим решением заключается в части elif: вы ничего не делаете со своей замененной строкой, замена не работает на месте. Поэтому вместо этого вы можете попробовать это:

def remove_numbers_and_reverse(string):

    if string == "":
        return string
    elif string[-1].isdigit():
        return remove_numbers_and_reverse(string[:-1])
    else:
        return string[-1] + remove_numbers_and_reverse(string[:-1])


print(remove_numbers_and_reverse("bunny1234"))
print(remove_numbers_and_reverse("3434string"))

Здесь я просто игнорирую последний символ, если это цифра. Более короткие и разумные решения см. В ответе Amolb.

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