Работа со строками python задания

[ Сборник задач ] Тема 8. Работа со строками

Строки в языке питон являются неизменяемыми объектами. Это значит, что в момент запуска скрипта ячейка памяти, на которую ссылается строка, не меняется. Из этого следует, что символы этого типа данных не могут меняться или переприсваиваться.

Они поддерживают различные операторы, могут сравниваться, включают большое количество встроенных методов. Любые действия над строками не модифицируют их, а создают новый объект.

Для успешного решения заданий нужно повторить: срезы, методы строк, операции и основные свойства.

Задача 1. Базовый уровень

Напишите функцию search_substr(subst, st), которая принимает 2 строки и определяет, имеется ли подстрока subst в строке st. В случае нахождения подстроки, возвращается фраза «Есть контакт!», а иначе «Мимо!». Должно быть найдено совпадение независимо от регистра обеих строк.

Для решения задания необходимо воспользоваться строковыми методами lower() и find(). Стоит помнить, что find() возвращает -1 в случае ненахождения нужного элемента.
Решение – IDE

def search_substr(subst, st): if subst.lower() in st.lower(): return 'Есть контакт!' else: return 'Мимо!' # Тесты print(search_substr('Кол', 'коЛокОл')) print(search_substr('Колобок', 'колобоК')) print(search_substr('Кол', 'Плов'))
Есть контакт! Есть контакт! Мимо!

Задача 2. Базовый уровень

Требуется определить индексы первого и последнего вхождения буквы в строке. Для этого нужно написать функцию first_last(letter, st), включающую 2 параметра: letter – искомый символ, st – целевая строка. В случае отсутствия буквы в строке, нужно вернуть кортеж (None, None), если же она есть, то кортеж будет состоять из первого и последнего индекса этого символа.

Решение задачи сводится к оперированию методами find() и rfind().
Решение — IDE

def first_last(letter, st): first = st.find(letter) if first < 0: return None, None last = st.rfind(letter) return first, last # Тесты print(first_last('a', 'abba')) print(first_last('a', 'abbaaaab')) print(first_last('a', 'a')) print(first_last('a', 'spring')) 

Задача 3. Базовый уровень

На основании предоставленного отрывка текста определить 3 наиболее часто встречаемых символа в ней. Пробелы нужно игнорировать (не учитывать при подсчете). Для выведения результатов вычислений требуется написать функцию top3(st). Итог работы функции представить в виде строки: «символ – количество раз, символ – количество раз…».

Для простоты подсчета количества вхождений символов удобно использовать Counter из модуля collections.Решение – IDE

from collections import Counter def top3(st): counter_top3 = Counter(st.replace(' ', '')).most_common(3) return ', '.join([f' - ' for letter, cnt in counter_top3]) # Тесты print(top3('Улыбкой ясною природа Сквозь сон встречает утро года Синея блещут небеса. Еще прозрачные, леса')) print(top3('АаА')) print(top3('Голова думала')) 
е - 9, о - 8, р - 6 А - 2, а - 1 А - 3, о - 2, л - 2

Задача 4. *Продвинутый уровень

Николай решил вспомнить старые времена. В свое время было модно писать сообщения с чередующимися заглавной и малой буквами. Он захотел изобрести функцию, которая будет делать с любой предоставленной строкой аналогичное. Ваша задача: повторить труд студента camel(st) с учетом того, что пробелы и знаки препинания не должны портить чередование регистра символов (они в этом процессе не учитываются, но возвращаются в итоговой строке).

При помощи методов lower() и upper() проблема решается достаточно просто.
Решение — IDE

def camel(st): new_st = '' letter_counter = 0 for index, val in enumerate(st): if val.isalpha(): if letter_counter % 2 == 0: new_st += val.upper() else: new_st += val.lower() letter_counter += 1 else: new_st += val return new_st # Тесты print(camel('Утром!! было! солнечно. ')) print(camel('КРАСОТА)))')) print(camel('дождливЫЙ, вечеР??')) 

И еще один вариант решения:
Решение — IDE

CASE_FUNCTIONS = [str.upper, str.lower] def camel(st): index = 0 camel_st = '' for sym in st: if sym.isalpha(): camel_st += CASE_FUNCTIONS[index % 2](sym) index += 1 else: camel_st += sym return camel_st # Тесты print(camel('Утром!! было! солнечно. ')) print(camel('КРАСОТА)))')) print(camel('дождливЫЙ, вечеР??')) 
УтРоМ!! бЫлО! сОлНеЧнО. КрАсОтА))) ДоЖдЛиВыЙ, вЕчЕр??

Задача 5. * Продвинутый уровень

Дмитрий считает, что когда текст пишут в скобках (как вот тут, например), его читать не нужно. Вот и надумал он существенно укоротить время чтения, написав функцию, которая будет удалять все, что расположено внутри скобок. Помогите ленивому Диме разработать функцию shortener(st), которая будет удалять все, что внутри скобок и сами эти скобки, возвращая очищенный текст (скобки могут быть вложенными).

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

def shortener(st): while '(' in st or ')' in st: left = st.rfind('(') right = st.find(')', left) st = st.replace(st[left:right + 1], '') return st # Тесты print(shortener('Падал(лишнее (лишнее) лишнее) прошлогодний снег (лишнее)')) print(shortener('(лишнее(лишнее))Падал прошлогодний (лишнее(лишнее(лишнее)))снег')) 
Падал прошлогодний снег Падал прошлогодний снег 

Задача 6. * Продвинутый уровень

Александр решил как-то отобразить в тексте BACKSPACE (т.е. удаление последнего символа). Он подумал, что символ «@» отлично для этого подходит. Всем своим знакомым он дал строки такого вида (например, «гр@оо@лк@оц@ва»), чтобы посмотреть, кому удастся написать функцию cleaned_str(st), возвращающую строку в ее чистом виде. 

Так как у строк нет метода pop(), нужно сначала преобразовать их в список, а потом провести нужные манипуляции.Решение — IDE

def cleaned_str(st): clean_lst = [] for symbol in st: if symbol == '@' and clean_lst: clean_lst.pop() elif symbol != '@': clean_lst.append(symbol) return ''.join(clean_lst) # Тесты print(cleaned_str('гр@оо@лк@оц@ва')) print(cleaned_str('сварка@@@@@лоб@ну@')) 

Добавить комментарий Отменить ответ

Найдите нас

Адрес
123 Мейн стрит
Нью Йорк, NY 10001 Часы
Понедельник—пятница: 9:00–17:00
Суббота и воскресенье: 11:00–15:00

Читайте также:  Разность в си шарп

Источник

[ Сборник задач ]Тема 8. Работа со строками

Рассмотрим строки как тип данных в Python. Опишем основные методы и свойства строк, необходимые для решения задач.

One

Строки в языке питон являются неизменяемыми объектами. Это значит, что в момент запуска скрипта ячейка памяти, на которую ссылается строка, не меняется. Из этого следует, что символы этого типа данных не могут меняться или переприсваиваться.

Они поддерживают различные операторы, могут сравниваться, включают большое количество встроенных методов. Любые действия над строками не модифицируют их, а создают новый объект.

Для успешного решения заданий нужно повторить: срезы, методы строк, операции и основные свойства.

Two

Для того, чтобы приведенные в коде символы интерпретировались как строка, их нужно обернуть в кавычки. Имеется 4 способа это сделать:

– одинарные кавычки
– двойные кавычки
– тройные одинарные кавычки (многострочный текст с сохранением форматирования)
– тройные двойные кавычки (многострочный текст с сохранением форматирования)

Пример – Интерактивный режим
>>> 'Одинарные кавычки'
'Одинарные кавычки'
>>> "Двойные кавычки"
Двойные кавычки
>>> '''Тройные
одинарные
кавычки '''
'Тройные \n одинарные \nкавычки '
>>> """
Тройные
двойные
кавычки"""
'\n Тройные \nдвойные \n\nкавычки'

Операция сложения или конкатенирования складывает две или более строк в одну. В качестве аргументов могут выступать только строки.

Пример – Интерактивный режим
>>> 'Hello ' + 'Py'
'Hello Py'
>>> 'Hello ' + 4
TypeError: can only concatenate str (not "int") to str

Операция умножения, применяемая к строкам, подразумевает ее дублирование определенное количество раз (в соответствии со значением числа, которое передано в качестве параметра. Если передать отрицательное число или ноль, то вернется пустая строка).

Пример – Интерактивный режим
>>> 'Hello ' * 4
'Hello Hello Hello Hello '
>>> 'Hello ' * -4
''

Читайте также:  Removing last char in javascript

Всё в питоне можно сделать строкой (так как все объекты имеют свойство __str__ , первично унаследованное от прародителя всех классов object ).

Поэтому любое число, список, объект или функцию можно представить в виде строки.

Не всегда приведение объекта к строке дает нам полезную информацию, но такая возможность имеется.

Метод encode() отображает строку в заданной кодировке. По умолчанию используется utf-8 . Можно использовать и другие варианты кодировки, но при невозможности закодировать строку возникнет ошибка.

Пример – Интерактивный режим
>>> 'cat'.encode(encoding='ascii')
b'cat'
>>> 'кот'.encode(encoding='utf-8')
b'\xd0\xba\xd0\xbe\xd1\x82'
>>> 'кот'.encode(encoding='cp1251')
b'\xea\xee\xf2'
>>> 'кот'.encode(encoding='utf32')
b'\xff\xfe\x00\x00:\x04\x00\x00>\x04\x00\x00B\x04\x00\x00'
>>> 'кот'.encode(encoding='ascii')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

Срезы строк возвращают новый объект на основании переданных параметров.

В общем виде синтаксис следующий:

СТРОКА[начало:конец:шаг]

Параметры можно опускать, поддерживается и отрицательная индексация (с конца). При любых значениях индексов (даже за рамками длины строки) возвратится объект(в том числе пустой), и никогда не возникнет ошибка.

Шаг означает пропуски символов в строке: по умолчанию 1 – не пропускать символы, а, например, 3 – брать в срез только каждый третий элемент строки.

Отрицательный шаг берет символы в обратном порядке (от конца текста к началу).

Пример – Интерактивный режим
>>> 'Это строка'[1]
'т'
>>>'Это строка'[::2]
'Эосрк'
>>>'Это строка'[::-1]
'акортс отЭ'
>>> 'Это строка'[1:4]
'то '
>>> 'Это строка'[:34:3]
'Э ра'
>>> 'Это строка'[-1:-4:-1]
'ако'
>>> 'Это строка'[:]
'Это строка'

Согласно PEP-257 строка документации ( docstring ) - это одно- или многострочный строковый литерал, разделенный тройными одинарными кавычками в начале модуля, функции, класса, метода и описывающий, что делает этот объект.
Важное замечание: docstring может быть представлен только в тройных одинарных кавычках, независимо от того, расположен ли он в одной строке или на нескольких.
Почти все объекты (функции, классы, модули или методы) имеют описание, которое можно посмотреть. Для этого используется свойство __doc__ .

Читайте также:  List add this java

Пример – Интерактивный режим
>>> import math
>>> math.__doc__
'This module provides access to the mathematical functions\ndefined by the C standard.'
>>> math.sqrt.__doc__
'Return the square root of x.'

Стоит отметить, что функция help() возвращает более полную информацию, нежели свойство __doc__ .

При оформлении docstring принято пользоваться одним из 4-х шаблонов:
– NumPy
– PyDoc
– EpyDoc
– Google

Источник

Оцените статью