Форум сайта python.su
Доброго времени суток! Буду рад помощи с решением задачи. Условие: Реализуйте функцию filter_string(). Она принимает на вход строку и символ и возвращает новую строку, в которой удалён переданный символ во всех его позициях. Если строка не содержит указанный символ, то она возвращается без изменений.
Итоговая строка также не должна содержать начальные и концевые пробелы
Проблема: при передачи строки, которая содержит заглавные буквы, строка возвращается с ними, а удаляются только строчные.
Прикреплённый файлы:
funcion Filter_string.py (284 байта)
Офлайн
Не, ты накопи подходящие символы в списке символов один раз, а потом один раз список символов склей в строку. Это будет умнее, чем делать несколько replace'ов.
Отредактировано py.user.next (Март 22, 2023 00:50:12)
Офлайн
Большое спасибо!
Офлайн
В данном коде проблема возникает из-за того, что вы используете метод lower() только для символа, но не для всей строки. Это означает, что при проверке символа на равенство с переданным символом в функцию, он будет сравниваться только с его строчным эквивалентом.
Чтобы исправить эту проблему, вам нужно использовать метод lower() для всей строки text, а затем заменить все экземпляры переданного символа, используя метод replace().
def filter_string(text, char): lower_text = text.lower().strip() return lower_text.replace(char.lower(), '').strip() print(filter_string('I Look Back if you are lost', 'I'))
Офлайн
PronkytБредишь капитально. С чего ты взял, что регистр символов не важен? А если это не фразы подаются, а пути в операционной системе или код на питоне для очистки его от посторонних символов. Изменение регистра в первоначальном тексте приведёт к тому, что это всё поломается. Поэтому регистр надо сохранять. Удалять можно регистронезависимо, но исходную строку надо сохранить в максимально неизменном виде. Поэтому там простой .replace() не подойдёт, так как он с регистром не умеет работать.
Чтобы исправить эту проблему, вам нужно использовать метод lower() для всей строки text, а затем заменить все экземпляры переданного символа, используя метод replace().def filter_string(text, char): lower_text = text.lower().strip() return lower_text.replace(char.lower(), '').strip() print(filter_string('I Look Back if you are lost', 'I'))
>>> def filter_string(text, char): ... lower_text = text.lower().strip() ... return lower_text.replace(char.lower(), '').strip() ... >>> print(filter_string('class A: s = "xxx123"', 'x')) class a: s = "123" >>>
Отредактировано py.user.next (Апрель 2, 2023 00:23:22)
Офлайн