Уведомления

Группа в Telegram: @pythonsu

#1 Март 21, 2023 13:10:12

MichaelGrace
Зарегистрирован: 2023-03-21
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Буду рад помощи!

Доброго времени суток! Буду рад помощи с решением задачи. Условие: Реализуйте функцию filter_string(). Она принимает на вход строку и символ и возвращает новую строку, в которой удалён переданный символ во всех его позициях. Если строка не содержит указанный символ, то она возвращается без изменений.

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

Прикреплённый файлы:
attachment funcion Filter_string.py (284 байта)

Офлайн

#2 Март 22, 2023 00:48:49

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9715
Репутация: +  842  -
Профиль   Отправить e-mail  

Буду рад помощи!

Не, ты накопи подходящие символы в списке символов один раз, а потом один раз список символов склей в строку. Это будет умнее, чем делать несколько replace'ов.



Отредактировано py.user.next (Март 22, 2023 00:50:12)

Офлайн

#3 Март 26, 2023 05:52:37

MichaelGrace
Зарегистрирован: 2023-03-21
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Буду рад помощи!

Большое спасибо!

Офлайн

#4 Апрель 1, 2023 21:48:06

Pronkyt
Зарегистрирован: 2021-05-03
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Буду рад помощи!

В данном коде проблема возникает из-за того, что вы используете метод 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'))

Офлайн

#5 Апрель 2, 2023 00:21:13

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9715
Репутация: +  842  -
Профиль   Отправить e-mail  

Буду рад помощи!

Pronkyt
Чтобы исправить эту проблему, вам нужно использовать метод 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'))
Бредишь капитально. С чего ты взял, что регистр символов не важен? А если это не фразы подаются, а пути в операционной системе или код на питоне для очистки его от посторонних символов. Изменение регистра в первоначальном тексте приведёт к тому, что это всё поломается. Поэтому регистр надо сохранять. Удалять можно регистронезависимо, но исходную строку надо сохранить в максимально неизменном виде. Поэтому там простой .replace() не подойдёт, так как он с регистром не умеет работать.

Вот пример, где твой код поменял имя у класса A.
  
>>> 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version