Главная страница
Навигация по странице:

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

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

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

  • Counter

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

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

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

  • сборник задач инф 10 класс. Сборник задач cnhjrb 10. Сборник задач Тема Работа со строками Admin


    Скачать 33.96 Kb.
    НазваниеСборник задач Тема Работа со строками Admin
    Анкорсборник задач инф 10 класс
    Дата04.01.2023
    Размер33.96 Kb.
    Формат файлаdocx
    Имя файлаСборник задач cnhjrb 10.docx
    ТипСборник задач
    #871952

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

    Admin | 02.04.2021

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

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

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

    Задача 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'))

    Результат выполнения

    (0, 3)

    (0, 6)

    (0, 0)

    (None, None)

    Задача 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'{letter} - {cnt}' 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('сварка@@@@@лоб@ну@'))
    Результат выполнения

    голова

    слон

     Как заменить в одной строке сразу два символа на два других разных символа? например в слове hello букву h на d, букву е на k? в одной строке посредством replace возможно ли это?



     •

    Ответить

     •

    Поделиться ›







    Triply Purple Chinchilla3 дняназад

    text = "hello"
    print (text.replace("h", "d")





      • Ответить



      • Поделиться ›









    Purple Chinchilla Triply3 дня назад

    не для одной буквы, а сразу для нескольких :)





        • Ответить



        • Поделиться ›









    Никита Большаков Purple Chinchilla2 дня назад • edited

    text = "hello"
    print(text.replace("h", "d").replace("e", "k"))





          • Ответить



          • Поделиться ›








    Алексей2 месяца назад

    Как проверить, если высказывание начинается с любого слова, состоящего в массиве из слов?



     •

    Ответить

     •

    Поделиться ›







    Ghostalb Алексей25 дней назад

    Довольно просто.
    строка.startswith(кортеж_последовательности)
    >>> a = 'first'
    >>> b = 'last'
    >>> a.startswith(('fir', 'las'))
    True
    >>> b.startswith(('fir', 'las'))
    True

      • 1



      • Ответить



      • Поделиться ›








    Александр Иванов4 месяца назад

    подскажите как из строки вывести только цифры (ввожу через input)



     •

    Ответить

     •

    Поделиться ›







    Andrey Markov Александр Иванов2 месяца назад • edited

    print(''.join(s for s in input() if s.isdigit()))

      • 1



      • Ответить



      • Поделиться ›


    написать администратору сайта