Функция для удаления определенного символа в Python
Друзья, добрый день! Мне нужно реализовать функцию. Она принимает на вход строку и символ и возвращает новую строку, в которой удалён переданный символ во всех его позициях. Мой код:
def filter_string(text, char):
result = ''
for current_char in text:
if current_char.upper() != char.upper():
result += current_char
return result
Но к сожалению, он работает некорректно. Ожидается:
filter_string(text, 'i') # 'f look forward wn'
filter_string(text, 'O') # 'If I lk frward I win
Ошибка:
def test():
text = 'I look back if you are lost'
assert filter_string(text, 'w') == 'I look back if you are lost' AssertionError: assert 'I' == 'I look back if you are lost'
- I look back if you are lost
+ I
tests/test_solution.py:6: AssertionError
short test summary info
FAILED tests/test_solution.py::test - AssertionError: assert 'I' == 'I look b...
Спасибо за помощь!
Ответы (4 шт):
Для начала покажу фикс на который многие и без меня указывали в комментариях
def filter_string(text, char):
result = ''
for current_char in text:
print(current_char)
if current_char.upper() != char.upper():
result += current_char
return result
Если задача не учебная, и даже если она учебная то тем более хорошо знать строковые функции присутсвующие в языке. Эту задачу можно реализовать например строковой функцией replace()
Параметры
- old – это старая подстрока, которая будет заменена.
- new – это новая подстрока, которая заменит старую подстроку.
- max – это дополнительный аргумент, заменяется только первые max вхождений.
Возвращаемое значение
Эта функция возвращает копию строки со всеми вхождениями старой подстроки заменен новой. Если указывается дополнительный аргумент max, только заменяются только первые max вхождений. Пример
Следующий пример показывает использование функции replace().
#!/usr/bin/python3
str = "это пример строки....wow!!! это действительно строка"
print (str.replace("wow", "поразительно"))
print (str.replace("это", "здесь", 3))
Результат выведет 2 строки
это пример строки....поразительно!!! это действительно строка
здесь пример строки....wow!!! здесь действительно строка
Пример как использовать реплейс как удаление:
filter_string = lambda t, c: t.translate({ord(c): '', ord(c.swapcase()): ''})
filter_string('f lOok forward wn', 'o') # 'f lk frward wn'
Еще вариант:
def filter_string(text, char):
return ''.join(filter(lambda x: x.upper() != char.upper(), text))
text = 'I look back if you are lost'
print(filter_string(text, 'i'))
# look back f you are lost
знакомое задание, ты забыл обозначить, что "Итоговая строка также не должна содержать начальные и концевые пробелы"
return result.strip() и всё заработает
