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

  • Упражнение 183. Последовательность химических

  • Упражнение 184. Выравниваем список

  • Упражнение 186. Кодирование на основе длин серий

  • (499) 782-38-89

  • Сборник. Сборник упражнений


    Скачать 1.68 Mb.
    НазваниеСборник упражнений
    Дата18.02.2023
    Размер1.68 Mb.
    Формат файлаpdf
    Имя файлаСборник.pdf
    ТипСборник
    #942935
    страница14 из 14
    1   ...   6   7   8   9   10   11   12   13   14
    232
    Решения if s[len(s) – 1] != t[len(t) – 1]:
    cost = 1
    # Рассчитываем три расстояния d1 = editDistance(s[0 : len(s) – 1], t) + 1
    d2 = editDistance(s, t[0 : len(t) – 1]) + 1
    d3 = editDistance(s[0 : len(s) – 1] , t[0 : len(t) – 1]) + \
    cost
    # Возвращаем минимальное return min(d1, d2, d3)
    # Рассчитываем редакционное расстояние между двумя строками, введенными пользователем def main():
    # Запрашиваем у пользователя две строки s1 = input("Введите строку: ")
    s2 = input("Введите другую строку: ")
    # Рассчитываем и отображаем редакционное расстояние print("Редакционное расстояние между %s и %s равно %d." % \
    (s1, s2, editDistance(s1, s2)))
    # Вызов основной функции main()
    Упражнение 183. Последовательность химических
    элементов
    ##
    # Определяем максимально продолжительную последовательность химических элементов,
    # в которой следующий элемент начинается на последнюю букву предыдущего
    #
    ELEMENTS_FNAME = "../Data/Elements.csv"
    ## Определяем максимально продолжительную последовательность химических элементов,
    # в которой следующий элемент начинается на последнюю букву предыдущего
    # @param start – первое слово в последовательности
    # @param words – список слов, которые могут появляться в последовательности
    # @return максимальная по длине последовательность слов def longestSequence(start, words):
    # Базовый случай: Если start пустая, то и список слов пустой if start == "":
    return []
    # Находим самый длинный список слов, проверяя все слова, которые могут
    # появиться в последовательности best = []
    last_letter = start[len(start) – 1].lower()
    for i in range(0, len(words)):

    Рекурсия

    233
    first_letter = words[i][0].lower()
    # Если первая буква следующего слова совпадает с последней буквой предыдущего if first_letter == last_letter:
    # Используем рекурсию для поиска последовательности–кандидата candidate = longestSequence(words[i], \
    words[0 : i] + words[i + 1 : len(words)])
    # Сохраняем последовательность, если она лучшая на данный момент if len(candidate) > len(best):
    best = candidate
    # Возвращаем лучшую последовательность с первым словом в начале return [start] + best
    ## Загружаем все элементы из файла
    # @return список всех элементов def loadNames():
    names = []
    # Открываем файл с набором данных inf = open(ELEMENTS_FNAME, "r")
    # Загружаем построчно в список элементов for line in inf:
    line = line.rstrip()
    parts = line.split(",")
    names.append(parts[2])
    # Закрываем файл и возвращаем список inf.close()
    return names
    # Отображаем самую длинную последовательность, начинающуюся со введенного
    # пользователем элемента def main():
    # Загружаем имена элементов в список names = loadNames()
    # Считываем первый элемент и делаем первую букву заглавной start = input("Введите название элемента: ")
    start = start.capitalize()
    # Проверяем, что пользователь ввел правильный элемент if start in names:
    # Удаляем первый элемент из списка names.remove(start)
    # Находим самую длинную последовательность sequence = longestSequence(start, names)
    # Отображаем последовательность элементов

    234
    Решения print("Самая длинная последовательность, начинающаяся с", start, ", это:")
    for element in sequence:
    print(" ", element)
    else:
    print("Извините, вы ввели неправильный элемент.")
    # Вызов основной функции main()
    Упражнение 184. Выравниваем список
    ##
    # Используя рекурсию, выравниваем список с вложенными элементами
    #
    ## Удаляем все иерархии внутри списка
    # @param data – список для выравнивания
    # @return выровненная версия списка def flatten(data):
    # Если список пустой, делать нечего if data == []:
    return []
    # Если первый элемент списка – список if type(data[0]) == list:
    # Выравниваем первый элемент и остальные return flatten(data[0]) + flatten(data[1:])
    else:
    # Первый элемент – не список, так что только остальные элементы нужно
    # выравнивать return [data[0]] + flatten(data[1:])
    # Демонстрируем работу функции def main():
    print(flatten([1, [2, 3], [4, [5, [6, 7]]], [[[8], 9], [10]]]))
    print(flatten([1, [2, [3, [4, [5, [6, [7, [8, [9, \
    [10]]]]]]]]]]))
    print(flatten([[[[[[[[[[1], 2], 3], 4], 5], 6], 7], 8], 9], \
    10]))
    print(flatten([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
    print(flatten([]))
    # Вызов основной функции main()
    Упражнение 186. Кодирование на основе длин серий
    ##
    # Выполняем кодирование на основе длин серий для строк и списков
    #

    Рекурсия

    235
    ## Кодирование на основе длин серий для строк и списков
    # @param data – строка или список для кодирования
    # @return список, в котором на четных позициях располагаются значения,
    # а на нечетных – количество раз, которое должно повториться предшествующее значение def encode(data):
    # Если данных нет, нечего и кодировать if len(data) == 0:
    return []
    Если бы мы задали условие data == "", то эта функция работала бы только для строк.
    Если data == [], то только для списков. Проверка длины списка len(data) == 0 по- зволяет обеспечить правильную работу функции как для строк, так и для списков.
    # Находим индекс первого элемента, отличного от элемента с индексом 0
    index = 1
    while index < len(data) and data[index] == data[index – 1]:
    index = index + 1
    # Кодируем группу символов current = [data[0], index]
    # Используем рекурсию для обработки символов от index до конца строки return current + encode(data[index : len(data)])
    # Демонстрируем работу функции кодирования def main():
    # Запрашиваем строку у пользователя s = input("Введите строку символов: ")
    # Отображаем результат print("При использовании кодирования на основе длин серий " \
    "результат будет следующим:", encode(s))
    # Вызов основной функции main()

    Б
    Булевы выражения, 41
    Булевы операторы, 41
    В
    Вложенные циклы, 59
    Вложенные if, 40
    И
    Инструкция def, 71
    else, 38
    if, 36
    if-else, 38
    return, 75
    Исключения, 133
    блок except, 133
    блок try, 133
    К
    Комментарии, 19
    Конкатенация, 22
    М
    Математические операторы, 15
    возведение в степень, 15
    вычисление остатка от деления, 15
    вычитание, 15
    деление, 15
    деление без остатка, 15
    сложение, 15
    умножение, 15
    Метод append, 93
    close, 126
    index, 96
    pop, 94
    read, 127
    readline, 126
    readlines, 127
    remove, 94
    reverse, 95
    rstrip, 129
    sort, 95
    write, 130
    Методы, 93
    Модули, 18
    О
    Оператор in, 96
    П
    Пары ключ-значение, 112
    Переменные, 14
    локальные, 75
    Получение символа из строки, 23
    Р
    Рекурсия, 145
    С
    Словари, 112
    Спецификаторы формата, 19
    Списки, 89
    индексы, 90
    элементы, 89
    Срез, 23
    Т
    Таблицы истинности, 41
    Предметный указатель

    Предметный указатель

    237
    Ф
    Файлы двоичные, 125
    режим доступа, 126
    текстовые, 125
    файловый объект, 126
    Форматирующий оператор, 21
    Функции, 15, 71
    chr, 184
    float, 16
    input, 16
    int, 16
    len, 23, 91
    open, 126
    ord, 184
    print, 17
    range, 58
    str, 130
    аргументы, 72
    вызов, 71
    определение, 71
    переменные параметров, 72
    Ц
    Циклы for, 57
    while, 56

    Книги издательства «ДМК ПРЕСС» можно купить оптом и в розницу в книготорговой компании «Галактика»
    (представляет интересы издательств
    «ДМК ПРЕСС», «СОЛОН ПРЕСС», «КТК Галактика»).
    Адрес: г. Москва, пр. Андропова, 38; тел.:
    (499) 782-38-89, электронная почта: books@alians-kniga.ru.
    При оформлении заказа следует указать адрес (полностью), по которому должны быть высланы книги; фамилию, имя и отчество получателя.
    Желательно также указать свой телефон и электронный адрес.
    Эти книги вы можете заказать и в интернет-магазине:
    www.a-planeta.ru.
    Бен Стивенсон
    Python. Сборник упражнений
    Главный редактор Мовчан Д. А.
    Зам. главного редактора Сенченкова Е. А.
    dmkpress@gmail.com
    Перевод Гинько А. Ю.
    Корректор Синяева Г. И.
    Верстка Чаннова А. А.
    Дизайн обложки Мовчан А. Г.
    Гарнитура PT Serif. Печать цифровая.
    Усл. печ. л. 17,4. Тираж 200 экз.
    Веб-сайт издательства:
    www.dmkpress.com
    1   ...   6   7   8   9   10   11   12   13   14


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