Задачи по Python
Каждому изучающему Python нужно писать код для закрепления. Вашему вниманию предлагаются несколько задач для реализации (не слишком простых (кроме первой) и не слишком сложных).
Для выполнения заданий крайне рекомендуется пройти самоучитель.
Также для этих задач есть репозиторий с тестами и моими решениями (чтобы проверить себя).
Для запуска тестов для вашей функции проще всего будет добавить код из папки с тестами в конец файла с функцией.
А теперь, собственно, задачи:
Простейшие арифметические операции (1)
Написать функцию arithmetic, принимающую 3 аргумента: первые 2 — числа, третий — операция, которая должна быть произведена над ними. Если третий аргумент +, сложить их; если —, то вычесть; * — умножить; / — разделить (первое на второе). В остальных случаях вернуть строку «Неизвестная операция«.
Високосный год (2)
Написать функцию is_year_leap, принимающую 1 аргумент — год, и возвращающую True, если год високосный, и False иначе.
Квадрат (3)
Написать функцию square, принимающую 1 аргумент — сторону квадрата, и возвращающую 3 значения (с помощью кортежа): периметр квадрата, площадь квадрата и диагональ квадрата.
Времена года (4)
Написать функцию season, принимающую 1 аргумент — номер месяца (от 1 до 12), и возвращающую время года, которому этот месяц принадлежит (зима, весна, лето или осень).
Банковский вклад (5)
Пользователь делает вклад в размере a рублей сроком на years лет под 10% годовых (каждый год размер его вклада увеличивается на 10%. Эти деньги прибавляются к сумме вклада, и на них в следующем году тоже будут проценты).
Написать функцию bank, принимающая аргументы a и years, и возвращающую сумму, которая будет на счету пользователя.
Простые числа (6)
Написать функцию is_prime, принимающую 1 аргумент — число от 0 до 1000, и возвращающую True, если оно простое, и False — иначе.
Правильная дата (7)
Написать функцию date, принимающую 3 аргумента — день, месяц и год. Вернуть True, если такая дата есть в нашем календаре, и False иначе.
XOR-шифрование (8)
Написать функцию XOR_cipher, принимающая 2 аргумента: строку, которую нужно зашифровать, и ключ шифрования, которая возвращает строку, зашифрованную путем применения функции XOR (^) над символами строки с ключом. Написать также функцию XOR_uncipher, которая по зашифрованной строке и ключу восстанавливает исходную строку.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Решение математических задач с использованием Python
Python является одним из самых популярных и мощных языков программирования, который широко используется для решения математических задач. Он обладает простым и понятным синтаксисом, что делает его доступным для новичков, но при этом предоставляет широкий набор инструментов для профессионалов.
Python подходит для решения математических задач по нескольким причинам:
- Во-первых, в языке встроены мощные математические библиотеки, которые предоставляют широкий набор функций и алгоритмов для работы с числами, символьными выражениями, графиками и другими математическими объектами.
- Во-вторых, Python имеет простую и интуитивно понятную структуру, что упрощает написание и понимание математических алгоритмов.
- Наконец, благодаря своей популярности и активному сообществу разработчиков, в Python существует множество полезных ресурсов, библиотек и примеров кода, которые помогают решать самые разнообразные задачи.
Как выучить Python для математического моделирования
Для того, чтобы освоить Python для решения математических задач, следует пройти несколько важных шагов.
- Подготовка к изучению Python. Перед началом изучения Python рекомендуется иметь базовые знания математики и алгоритмов. Понимание основных математических понятий и алгоритмического мышления облегчит процесс освоения языка.
- Основные ресурсы для обучения Python. Существует множество онлайн-курсов, учебников и видеоуроков, которые помогут вам изучить Python. Некоторые популярные ресурсы включают Codecademy, Coursera, Udemy и официальную документацию Python. Рекомендуется выбрать ресурсы, которые наиболее подходят вашему уровню и стилю обучения.
- Практические задания для закрепления знаний. После освоения основ Python важно практиковаться, решая различные математические задачи с использованием языка. Это поможет вам укрепить полученные знания и развить навыки программирования. Попробуйте создавать свои собственные проекты и решать задачи с использованием библиотек Python, в дальнейшем можно пройти платные курсы по Питону, чтобы повысить свой уровень.
Основные математические библиотеки Python
Python предлагает множество математических библиотек, которые облегчают работу с числами, вычислениями, графиками и другими математическими объектами. Некоторые из наиболее популярных библиотек:
- NumPy: Библиотека для работы с массивами и матрицами чисел, включая функции для выполнения математических операций на них.
- SciPy: Набор модулей для выполнения научных и инженерных вычислений, включая оптимизацию, интегрирование, аппроксимацию и другие.
- Pandas: Библиотека для обработки и анализа данных, предоставляющая удобные структуры данных и функции для работы с ними.
- Matplotlib: Библиотека для создания графиков и визуализации данных в Python.
Применение Python для решения различных типов математических задач
Python может быть использован для решения широкого спектра математических задач. Ниже приведены некоторые примеры:
- Решение алгебраических уравнений с использованием Python. С помощью Python можно решать алгебраические уравнения, включая линейные и нелинейные. Используя соответствующие библиотеки, такие как NumPy или SymPy, можно проводить символьные вычисления и находить аналитические решения уравнений.
- Статистический анализ данных с помощью Python. Python предлагает мощные инструменты для статистического анализа данных. Библиотеки, такие как NumPy и Pandas, позволяют загружать, обрабатывать и анализировать большие объемы данных, а библиотека SciPy предоставляет функции для выполнения различных статистических тестов и моделирования данных.
- Применение Python в дифференциальном и интегральном исчислении. Python можно использовать для решения задач дифференциального и интегрального исчисления. Библиотека SciPy предоставляет функции для численного интегрирования и решения обыкновенных дифференциальных уравнений. Также можно использовать символьные вычисления с помощью библиотеки SymPy для аналитического решения дифференциальных уравнений.
Примеры использования Python в решении математических задач
Давайте рассмотрим несколько примеров использования Python для решения математических задач:
Пример решения задачи оптимизации
Python предлагает различные методы оптимизации для поиска оптимальных значений переменных. Например, библиотека SciPy содержит функцию minimize, которая может быть использована для минимизации или максимизации заданной функции с ограничениями.
Пример решения системы уравнений
Используя символьные вычисления с помощью библиотеки SymPy, Python позволяет решать системы алгебраических уравнений. Это полезно, когда требуется найти значения нескольких переменных, удовлетворяющих заданным уравнениям.
Пример анализа данных с использованием Python
Python библиотеки Pandas и Matplotlib предоставляют мощные средства для анализа и визуализации данных. Вы можете загрузить данные из различных источников, провести их статистический анализ, построить графики и диаграммы, чтобы получить полезные инсайты.
Перспективы использования Python в математике
Python является мощным инструментом для решения математических задач. Благодаря широкому выбору математических библиотек, простому синтаксису и огромному сообществу разработчиков, Python предоставляет решения для различных видов математических проблем. Он позволяет решать уравнения, проводить статистический анализ данных, моделировать и проводить численные эксперименты.
Использование Python в математике имеет большой потенциал и может быть применено в различных областях, таких как наука, инженерия, экономика и финансы. Освоение Python для решения математических задач открывает новые возможности для исследования и решения сложных проблем.
Как решить задачу в питоне

Выходные данные:
Программа должна вывести список студентов, посетивших все лекции, в алфавитном порядке.
#Пример вывода Иванов Петрова
n = int(input()) res = for _ in range(n - 1): res &= print(*sorted(res), sep='\n')
res = [set(input() for _ in range(int(input()))) for _ in range(int(input()))] print(*sorted(set.intersection(*res)), sep='\n')
n = int(input()) my_set = res = frozenset.intersection(*my_set) print(*sorted(res), sep='\n')
2. Сортировка IP-адресов
Напишите программу, которая считывает IP-адреса и выводит их в порядке возрастания в соответствии с десятичным представлением. Чтобы перевести адрес, к примеру 192.168.1.2 в десятичное число, применяют формулу:
192 х 256 3 + 168 x 256 2 + 1 x 256 1 + 2 x 256 0 = 3232235778
Входные данные:
В первой строке подается число n, затем n строк с IP-адресами.
#Пример ввода 12 123.199.44.25 123.199.201.245 145.198.168.93 170.67.181.62 170.67.222.111 170.67.11.90 45.8.106.59 203.13.32.156 179.67.171.194 179.67.181.62 179.67.212.111 177.67.10.90
Выходные данные:
Список IP-адресов, отсортированных по десятичному представлению.
#Пример вывода 45.8.106.59 123.199.44.25 123.199.201.245 145.198.168.93 170.67.11.90 170.67.181.62 170.67.222.111 177.67.10.90 179.67.171.194 179.67.181.62 179.67.212.111 203.13.32.156
Решение
Способ 1 – с использованием ipaddress:
import ipaddress n = int(input()) spisok = [] for i in range(n): temp = input() spisok.append(temp) sortedkey = sorted(spisok, key = ipaddress.IPv4Address) print(*sortedkey, sep='\n')
print(*sorted([input() for _ in range(int(input()))], key=lambda x: [*map(int, x.split('.'))]), sep='\n')
def decFormat(ip): return sum(map(lambda x, y: int(x) * 256 ** y, ip.split('.'), (3, 2, 1, 0))) ips = [input() for _ in range(int(input()))] print(*sorted(ips, key = decFormat), sep = '\n')
3. Сортировка по гематрии
Гематрия – это сумма числовых значений букв, входящих в состав слова. В данном случае числовое значение букв определяется по таблице ASCII, причем учитываются только заглавные буквы (то есть при подсчете гематрии все буквы переводятся в верхний регистр). Программа должна вывести список слов в исходном регистре, отсортированный в соответствии с гематрией.
Входные данные:
Число n, затем n строк с английскими словами, состоящими из букв в разных регистрах.
#Пример ввода 5 cAndy WAffle chocolaTE Cake tirAMIsu
Выходные данные:
Список, отсортированный в соответствии с гематрией слов.
#Пример вывода Cake cAndy WAffle chocolaTE tirAMIsu
Решение
def gemValue(word): return sum(map(lambda l: ord(l.upper()) - ord('A'), word)), word words = [input() for _ in range(int(input()))] print(*sorted(words, key=gemValue), sep='\n')
words = [input() for _ in range(int(input()))] print(*sorted(sorted(words), key=lambda word: sum([ord(sym.upper()) - ord('A') for l in word])), sep='\n')
print(*sorted([input() for _ in range(int(input()))], key=lambda x: (sum([ord(_) - ord('A') for _ in x.upper()]), x)), sep='\n')
4. Группировка дубликатов
На вход подается строка символов, разделенных пробелами. Напишите программу, которая группирует одинаковые символы, формируя вложенный список.
Входные данные:
#Пример ввода h h h e e l l l o w w o o o o r r r l l d d
Выходные данные:
#Пример вывода [['h', 'h', 'h'], ['e', 'e'], ['l', 'l', 'l'], ['o'], ['w', 'w'], ['o', 'o', 'o', 'o'], ['r', 'r', 'r'], ['l', 'l'], ['d', 'd']]
Решение
Вариант 1 – с itertools:
from itertools import groupby print([list(group) for key, group in groupby(input().split())])
res = [] for i in input().split(): res.append([i]) if not res or i not in res[-1] else res[-1].append(i) print(res)
res = [] for i in input().split(): if (not res) or (i != res[-1][-1]): res.append([i]) else: res[-1].append(i) print(res)
5. Разделение списка на отрезки
На вход подается строка символов, из которых формируется список и число n. Напишите функцию, которая разбивает список на n частей, формируя вложенный список.
Входные данные:
#Пример ввода w t z k p e h t b 3
Выходные данные:
#Пример вывода [['w', 't', 'z'], ['k', 'p', 'e'], ['h', 't', 'b']]
Решение
def cutList(n): cuts = [lst[x:x+n] for x in range(0, len(lst), n)] return cuts lst = input().split() n = int(input()) print(cutList(n))
def cutList(lst: list, n: int) -> list: return [lst[i:n + i] for i in range(0, len(lst), n)] print(cutList(input().split(), int(input())))
def cutList(lst, n): for i in range(0, len(lst), n): yield lst[i:i + n] print(list(cutList(input().split(), int(input()))))
Материалы по теме
- Словари в Python: 12 задач для начинающих с решениями
- 5 классических задач по Python для начинающих с решениями
- Задача о поврежденной XML-строке
Как решить задачу в питоне
Специфика типа данных словарь (dict) в Python, характеристики. Примеры использования словарей, задачи с решениями.
Специфика типа данных кортеж (tuple) в Python, методы, операции. Примеры использования кортежей, задачи с решениями.
Специфика типа данных множества (set) в Python, методы, операции. Примеры использования множеств, задачи с решениями.
В данном уроке разбираемся с основными составляющими функции в Python: аргументы, тело, возвращаемое значение. Изучаем структуру и синтаксис условного оператора if..elif..else. Учимся писать циклы for и while. Решаем задачи.
Создать функцию calc(a, b, operation). Описание входных параметров: 1. Первое число 2. Второе число 3. Действие над ними: 1) + Сложить 2) - Вычесть 3) * Умножить 4) / Разделить 5) В остальных случаях функция должна возвращать "Операция не поддерживается"
Решение - IDE
def calc(a, b, operation): # Задаем дефолтное значение возвращаемого результата result = 'Операция не поддерживается' if operation == '+': result = a + b elif operation == '-': result = a - b elif operation == '*': result = a * b elif operation == '/': # Проверка деления на ноль if b is not 0: result = a / b else: result = 'Деление на 0!' # Возвращаем результат выполнения функции return result if __name__ == '__main__': # Проверяем корректные значения print(calc(30, 15, '+')) print(calc(30, 15, '-')) print(calc(30, 15, '*')) print(calc(30, 15, '/')) # Проверяем проверку деления на ноль print(calc(30, 0, '/')) # Проверяем неподдерживаемую операцию print(calc(30, 15, '%'))
Видео с решением данной задачи
Напишите программу, которая будет выводить нечетные числа из списка и остановится, если встретит число 139
Решение - IDE
# Функция, которая проверяет входной параметр на четность def even(num): # Возвращаем True, если остаток от деления на 2 равен нулю return num % 2 == 0 if __name__ == '__main__': lst = [1, 34, 78, 345, 111, 8, 5, 34, 9, 3, 139, 56, 2, 67, 69, 90] # В цикле перебираем элементы вышесозданного списка for item in lst: # Если текущий элемент равен 139, то прерываем цикл if item == 139: break # Выводим элемент, если он не является четным if not even(item): print(item)
Видео с решением данной задачи
Создайте список [ 18, 14, 10, 6, 2 ] с помощью функции range()
Решение - IDE
lst = [] # Пробегаемся циклом for по последовательности, которую формирует функция range() # Начало диапазона: 18 # Конец диапазона: 1(обратите внимание, что 1 не включается в итоговую последовательность) # Шаг: -4(обратный шаг - двигаемся в сторону уменьшения значений) for item in range(18, 1, -4): lst.append(item) print(lst)
Видео с решением данной задачи
Дан список lst = [11, 5, 8, 32, 15, 3, 20, 132, 21, 4, 555, 9, 20]. Необходимо вывести элементы, которые одновременно 1) меньше 30 и 2) делятся на 3 без остатка. Все остальные элементы списка необходимо просуммировать и вывести конечный результат.
Решение - IDE
# Задаем константы для значений, заданных в условии MEDIAN = 30 DIV_NUM = 3 # Создаем список lst = [11, 5, 8, 32, 15, 3, 20, 132, 21, 4, 555, 9, 20] # Задаем начальное значение переменной для суммы элементов sm = 0 # Поочередно перебираем элементы списка for item in lst: # Проверяем, что # 1) Текущий элемент меньше 30 # 2) Остаток от деления текущего элемента на 3 равен 0 if (item < MEDIAN) and (item % DIV_NUM == 0): print(item) # Добавляем элемент к сумме, если условие не выполнено else: sm += item # Выводим конечную сумму print('Sum: ', sm)
Вывод в консоль
15 3 21 9 Sum: 787
Написать функцию month_to_season(), которая принимает 1 аргумент - номер месяца - и возвращает название сезона, к которому относится этот месяц. Например, передаем 2, на выходе получаем 'Зима'.
Решение - IDE
# Имя функции: month_to_season # Параметр: month def month_to_season(month): # Создание словаря для хранения информации о сезонах # Ключ: кортеж(tuple) из номеров входящих в сезон месяцов # Значение: строка(str)-название сезона season_ranges = < (12, 1, 2): 'Winter', (3, 4, 5): 'Spring', (6, 7, 8): 'Summer', (9, 10, 11): 'Autumn' ># Создание переменной для возвращаемого значения функции season = None # Цикл, в котором по очереди перебираются пары ключ-значение(номера месяцев - сезон) из словаря for key, value in season_ranges.items(): # Если значение входного параметра(номер месяца) входит в состав ключа(пример ключа - (3, 4, 5)) if month in key: # То присваиваем возвращаемой переменной season название сезона season = value # Останавливаем цикл break # Возвращаем название сезона return season # Проверяем работу функции print(month_to_season(1)) print(month_to_season(5)) print(month_to_season(8)) print(month_to_season(9)) print(month_to_season(12)) print(month_to_season(999))
Вывод в консоль
Winter Spring Summer Autumn Winter None
Еще задачи по теме
Особенности и структура условных выражений в Python. Полные и неполные условные выражения, примеры задач с решениями.
Задачи по циклам в Python: for, while. Синтаксис, особенности выхода из циклов, вложенные циклы.
Функции, их типы, причины применения. Аргументы и параметры, разновидности. Примеры использования и задачи с решениями.
В данном уроке учимся выполнять основные действия над строковым типом данных в Python: создание, экранирование, конкатенация и умножение, срезы, форматирование, строковые методы. Решаем задачи.
Дана следующая строка: ‘Сидел барсук в своей норе и ел картошечку пюре’ 1. Создайте данную строку 2. Получите ее длину 3. Проведите операцию сложения со строкой ‘.’ 4. Проверьте, входит ли подстрока ‘ре’ в заданную строку 5. Посчитайте количество вхождений подстроки ‘ре’ 6. Получите предпоследний символ строки 7. Получите все символы с нечетными индексами 8. Определите, сколько слов в строке
Решение - Интерактивный режим
# 1. Создаем строку >>> my_str = 'Сидел барсук в своей норе и ел картошечку пюре' # 2. Получаем длину строки с помощью встроенного метода len() >>> len(my_str) 46 # 3. Выполняем конкатенацию строк >>> my_str + '.' 'Сидел барсук в своей норе и ел картошечку пюре.' # 4. Определяем вхождение подстроки 'ре' >>> 'ре' in my_str True # 5. Определяем количество вхождений подстроки 'ре' >>> my_str.count('ре') 2 # 6. Получаем предпоследний символ строки >>> my_str[-2] 'р' # 7. Получаем элементы с нечетными индексами # Для этого выполняем срез, начиная с элемента с индексом 1 по конец строки с шагом 2 >>> my_str[1::2] 'ие асквсойнр лкроек юе' # 8. Определяем количество слов в строке # Для этого считаем количество пробелов и прибавляем 1 >>> my_str.count(' ') + 1 9
Видео с решением данной задачи
Дана строка: ‘пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.’ 1. Начните строку с заглавной буквы, если она находится в нижнем регистре. 2. Найдите индекс вхождения подстроки ‘сопровождать’. 3. Замените вхождение подстроки ‘сопровождать’ на ‘поддерживать’. 4. Разбейте предложение на части по запятым. Соедините части обратно, снова добавив запятые между частями.
Решение - Интерактивный режим
# 1. Создаем строку >>> my_str = 'пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.' # 2. Проверяем регистр строки и делаем первую букву заглавной, если регистр нижний >>> if my_str.islower(): my_str.capitalize() . 'Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.' # 3. Ищем индекс вхождения подстроки 'сопровождать' # Вариант 1: Используем метод find() - строковый метод >>> my_str.find('сопровождать') 26 # Вариант 2: Используем метод index() - метод для работы с любыми последовательностями >>> my_str.index('сопровождать') 26 # 4. Заменяем подстроку 'сопровождать' на 'поддерживать' >>> my_str.replace('сопровождать', 'поддерживать') 'пишите код так, как будто поддерживать его будет склонный к насилию психопат, который знает, где вы живете.' # 5. Разбиваем строку на подстроки по разделителю ',' и сохраняем подстроки в список >>> lst = my_str.split(',') >>> lst ['пишите код так', ' как будто сопровождать его будет склонный к насилию психопат', ' который знает', ' где вы живете.'] # Соединяем полученные ранее подстроки обратно >>> ','.join(lst) 'пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.'
Видео с решением данной задачи
Дано имя файла. Необходимо вывести его расширение.
Решение - IDE
# Импортируем стандартный модуль re для работы с регулярными выражениями import re # Создаем константу для имени файла, которое будет использовать для тестов FILENAME = 'folder1/folder2/file.ext' # Вариант решения 1 - пользуемся срезами def extention_slice(filename): # Находим индекс точки point_pos = filename.find('.') # Возвращаем срез начиная с позиции после точки и до конца имени файла return filename[point_pos + 1:] # Вариант решения 2 - используем функцию partition() def extention_part(filename): # С помощью метода partition() разбиваем имя файла на 3 части # В качестве разделителя используем символ '.' # Метод partition() возвращает кортеж из 3 элеметов # Возвращаем 3-й элемент return filename.partition('.')[2] # Вариант решения 3 - пользуемся регулярными выражениями def extention_regex(filename): # Формируем регулярное выражение для поиска расширения: # \. - ищем символ точки в строке # .+$ - после точки ищем любые символы вплоть до конца строки # (.+$) - скобками формируем группу(это необходимо, чтобы получить не точку с расширением, а только само расширение) regex = r'\.(.+$)' # Обращаемся к модулю re и вызываем для него метод search для поиска подстроки по регулярному выражению # Из результата берем группу с индексом 1 # Это часть подстроки, которая подходит под выражение в скобках (например, 'ext') # Группа с индексом 0 - это полная подстрока, подходящая под регулярное выражение(например, '.ext') return re.search(regex, filename)[1] # Тесты if __name__ == '__main__': print(extention_slice(FILENAME)) print(extention_part(FILENAME)) print(extention_regex(FILENAME))
Вывод в консоль
ext ext ext
Видео с решением данной задачи
Сложите цифры целого числа.
Решение - с IDE
NUM = 12345 # Вариант решения 1 - пользуемся циклом for def sum_for(num): # Инициализируем переменную для суммы s = 0 # Преобразуем число в строку # В цикле перебираем символу полученной строки for item in str(num): # Каждый символ переводим в число и добавляем к сумме s = s + int(item) # Возвращаем конечную сумму return s # Вариант решения 2 - используем генераторы списков def sum_list(num): # Создаем список с помощью генератора # Конечные элементы списка переводим в числа lst = [int(item) for item in str(num)] # С помощью встроенной функции sum() находим сумму элементов списка return sum(lst) # Тесты if __name__ == '__main__': print(sum_for(NUM)) print(sum_list(NUM))
Вывод в консоль
15 15
Видео с решением данной задачи
Замените заданное количество вхождений подстроки.
Решение - IDE
STR = '01101011101011' # Тесты if __name__ == '__main__': # Заменяем 1 ноль на единицу print(STR.replace('1', '0', 1)) # Заменяем 5 нулей на единицы print(STR.replace('1', '0', 5)) # Заменяем все нули на единицы(значение по-умолчанию) print(STR.replace('1', '0')) # Заменяем 9 нулей на единицы(все присутствующие единицы) print(STR.replace('1', '0', 9)) # Заменяем 10 нулей на единицы(количество единиц больше, чем есть в строке) print(STR.replace('1', '0', 10))
Вывод в консоль
00101011101011 00000000101011 00000000000000 00000000000000 00000000000000
Видео с решением данной задачи
Выяснить, является ли строка палиндромом.
Решение - IDE
# Список из нескольких строк для тестирования работы функции check_if_palindrome() TESTS = ['Аргентина манит негра', 'аргентина манит негра', 'Манит Аргентина негра'] # Функция, которая проверяет, является ли переданная строка string палиндромом def check_if_palindrome(string): # Для упрощения процесса проверки удаляем пробелы между словами # И переводим строку в нижний регистр prepared_str = string.replace(' ', '').lower() # Используем срез с обратным шагом, чтобы перевернуть строку задом наперед # Если строка равна своей перевернутой копии if prepared_str == prepared_str[::-1]: # Возвращаем логическое True return True else: # Возвращаем логическое False return False if __name__ == '__main__': # Прогоняем в цикле все тестовые строки из списка # Для каждой строки вызываем функцию, выполняем проверку и печатаем результат for item in TESTS: print('Строка является палиндромом:', check_if_palindrome(item))
Вывод в консоль
Строка является палиндромом: True Строка является палиндромом: True Строка является палиндромом: False
Дана строка из двух слов. Поменяйте слова местами.
Решение - IDE
def swap_words(string): # Формируем список из слов строки lst = string.split(' ') # Меняем порядок слов на обратный lst.reverse() # Соединяем слова в предложение через пробелы и возвращаем полученное значение return ' '.join(lst) if __name__ == '__main__': print(swap_words('идет снег')) print(swap_words('идет снег давно'))
Вывод в консоль
снег идет давно снег идет
Еще задачи по теме
Строки как тип данных в Python. Основные методы и свойства строк. Примеры работы со строками, задачи с решениями.
4. Модули и пакеты
В данном уроке рассматриваем модули и пакеты из стандартной библиотеки Python и репозитория PyPI. Разбираемся с командами для импорта: import и from..import . Учимся выполнять абсолютный и относительный импорт. Настраиваем виртуальные пространства venv . Создаем собственные модули.
Задание 4.1
Изучите содержимое и импортируйте модуль this.py
Решение - IDE
# Данный модуль относится к Стандартной библиотеке # И при импорте выводит в консоль так называемый Дзен Python import this
Вывод в консоль
The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
Видео с решением данной задачи
Задание 4.2
1. Найдите пакет http(относится к Стандартной библиотеке), изучите модули, из которых он состоит. 2. Импортируйте модуль client из пакета http 3. Воспользуйтесь функционалом импортированного модуля: 1. Создайте HTTP соединение по адресу www.google.com 2. Отправьте GET запрос по адресу выше 3. Проверьте ответ на отправленный запрос
Решение - Интерактивный режим
>>> import http # Вызываем справку по пакету http >>> help('http') Help on package http: NAME http MODULE REFERENCE https://docs.python.org/3.7/library/http The following documentation is automatically generated from the Python source files. It may be incomplete, incorrect or include features that are considered implementation detail and may vary between Python implementations. When in doubt, consult the module reference at the location listed above. # Как мы можем заметить, данный пакет состоит из 4 модулей PACKAGE CONTENTS client cookiejar cookies server .
Решение - IDE
# 2. Импортируем модуль client из пакета http # Модуль client позволяет отправлять и обрабатывать HTTP запросы к веб-серверу from http import client if __name__ == '__main__': # 3.1. Создаем соединение по адресу 'www.google.com' # Для этого обращаемся к модулю client # И вызываем конструктор класса HTTPConnection() connection = client.HTTPConnection('www.google.com') # 3.2. Отправляем GET запрос к корневой странице веб-сервера connection.request('GET', '/') # 3.3. Получаем ответ на наш запрос res = connection.getresponse() # Из полного ответа достаем интересующую нас веб-страницу(ее HTML код) page = res.read() print(page)

HTML код и отображение в браузере полученной страницы
Видео с решением данной задачи
Задание 4.3
Выполните следующие действия: 1. Изучите сайт репозитория пакетов PyPI (https://pypi.org/) 2. Запустите менеджер пакетов pip, изучите уже установленные модули. 3. Создайте виртуальное окружение через консоль. 4. Активируйте созданное окружение, установите любой из пакетов(например, requests), деактивируйте окружение. 5. Создайте виртуальное окружение через PyCharm. 6. Активируйте созданное окружение, установите пакет wget. 7. Воспользуйтесь функционалом пакета wget: 1) Импортируйте данный пакет 2) Скачайте с его помощью файл
Решение - Терминал/Консоль
# 2 # Обращаемся к менеджеру пакетов pip и вызываем команду list # Она позволяет просмотреть модули и пакеты, которые глобально установлены в системе $ pip3 list Package Version ------------------ -------- atomicwrites 1.3.0 attrs 19.1.0 behave 1.2.6 certifi 2019.3.9 importlib-metadata 0.19 itsdangerous 1.1.0 Jinja2 2.11.2 MarkupSafe 1.1.1 six 1.12.0 urllib3 1.25.2 uuid 1.30 zipp 0.5.2 # 3 # Создаем виртуальное окружение в папке demo_venv $ python3 -m venv demo_venv # Содержимое папки с виртуальным окружением $ ls demo_venv bin include lib pyvenv.cfg # 4 # Активируем свежесозданное виртуальное окружение # Далее работаем в рамках активированного окружения demo_venv $ source demo_venv/bin/activate # Устанавливаем пакет requests с помощью менеджера pip (demo_venv) $ pip3 install requests Collecting requests . Successfully installed certifi-2020.4.5.2 chardet-3.0.4 idna-2.9 requests-2.23.0 urllib3-1.25.9 # Проверяем, что пакет установился (requests 2.23.0) (demo_venv) $ pip3 list Package Version ---------- ---------- certifi 2020.4.5.2 chardet 3.0.4 idna 2.9 pip 19.2.3 requests 2.23.0 setuptools 41.2.0 urllib3 1.25.9 # Деактивируем окружение (demo_venv) $ deactivate

5. Создаем проект с виртуальным окружением в IDE PyCharm

6.1. Переходим во вкладку Terminal - окружение venv уже активировано

6.2. Устанавливаем модуль wget
Решение - IDE PyCharm
# 7.1 # Импортируем модуль wget import wget if __name__ == '__main__': # 7.2 # Создаем переменную для хранения ссылки на картинку url = 'https://m.dom-eda.com/uploads/images/catalog/item/dfc9a3e974/3cbf3bd41c_1000.jpg' # Обращаемся к модулю wget и вызываем метод download() # Метод download() скачивает файл по ссылке и возвращает имя скачанного файла filename = wget.download(url)
Видео с решением данной задачи
Задание 4.4
Стандартная библиотека. Модуль calendar. Выполните следующие действия: 1. Изучите справку для модуля calendar 2. Импортируйте модуль calendar 3. Найдите расположение файла модуля calendar и изучите его содержимое 4. Получите список доступных атрибутов модуля calendar 5. С помощью модуля calendar узнайте, является ли 2027 год високосным 6. С помощью модуля calendar узнайте, каким днем недели был день 25 июня 1995 года 7. Выведите в консоль календарь на 2023 год
Решение - Интерактивный режим
# 1. Изучите справку для модуля calendar >>> help('calendar') Help on module calendar: NAME calendar - Calendar printing functions MODULE REFERENCE https://docs.python.org/3.7/library/calendar The following documentation is automatically generated from the Python source files. It may be incomplete, incorrect or include features that are considered implementation detail and may vary between Python implementations. When in doubt, consult the module reference at the location listed above. DESCRIPTION Note when comparing these calendars to the ones printed by cal(1): By . # 2. Импортируйте модуль calendar >>> import calendar # 3. Найдите расположение файла модуля calendar и изучите его содержимое >>> calendar.__file__ '/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/calendar.py' # 4. Получите список доступных атрибутов модуля calendar >>> dir(calendar) ['Calendar', 'EPOCH', 'FRIDAY', 'February', 'HTMLCalendar', 'IllegalMonthError', 'IllegalWeekdayError', 'January', 'LocaleHTMLCalendar', 'LocaleTextCalendar', 'MONDAY', 'SATURDAY', 'SUNDAY', 'THURSDAY', 'TUESDAY', 'TextCalendar', 'WEDNESDAY', '_EPOCH_ORD', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_colwidth', '_locale', '_localized_day', '_localized_month', '_spacing', 'c', 'calendar', 'datetime', 'day_abbr', 'day_name', 'different_locale', 'error', 'firstweekday', 'format', 'formatstring', 'isleap', 'leapdays', 'main', 'mdays', 'month', 'month_abbr', 'month_name', 'monthcalendar', 'monthlen', 'monthrange', 'nextmonth', 'prcal', 'prevmonth', 'prmonth', 'prweek', 'repeat', 'setfirstweekday', 'sys', 'timegm', 'week', 'weekday', 'weekheader'] # 5. С помощью модуля calendar узнайте, является ли 2027 год високосным >>> calendar.isleap(2027) False # 6. С помощью модуля calendar узнайте, каким днем недели был день 25 июня 1995 года >>> calendar.weekday(1995, 6, 25) 6 # 7. Выведите в консоль календарь на 2023 год >>> print(calendar.calendar(2023)) 2023 January February March Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 1 2 3 4 5 2 3 4 5 6 7 8 6 7 8 9 10 11 12 6 7 8 9 10 11 12 9 10 11 12 13 14 15 13 14 15 16 17 18 19 13 14 15 16 17 18 19 16 17 18 19 20 21 22 20 21 22 23 24 25 26 20 21 22 23 24 25 26 23 24 25 26 27 28 29 27 28 27 28 29 30 31 30 31 April May June Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 1 2 3 4 5 6 7 1 2 3 4 3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11 10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18 17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25 24 25 26 27 28 29 30 29 30 31 26 27 28 29 30 July August September Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 1 2 3 4 5 6 1 2 3 3 4 5 6 7 8 9 7 8 9 10 11 12 13 4 5 6 7 8 9 10 10 11 12 13 14 15 16 14 15 16 17 18 19 20 11 12 13 14 15 16 17 17 18 19 20 21 22 23 21 22 23 24 25 26 27 18 19 20 21 22 23 24 24 25 26 27 28 29 30 28 29 30 31 25 26 27 28 29 30 31 October November December Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 1 2 3 2 3 4 5 6 7 8 6 7 8 9 10 11 12 4 5 6 7 8 9 10 9 10 11 12 13 14 15 13 14 15 16 17 18 19 11 12 13 14 15 16 17 16 17 18 19 20 21 22 20 21 22 23 24 25 26 18 19 20 21 22 23 24 23 24 25 26 27 28 29 27 28 29 30 25 26 27 28 29 30 31 30 31
Задание 4.5
Задание 2 Репозиторий PyPI. Пакет FuzzyWuzzy. Пакет FuzzyWuzzy - это библиотека для нечеткого сравнения строк. Нечеткое сравнение строк позволяет не просто сказать - одинаковые строки или нет, а определить степень их похожести. В текущем задании предлагаем вам поработать с данной библиотекой: 1. Изучите документацию для пакета fuzzywuzzy на https://pypi.org/ 2. Установите его с помощью менеджера пакетов pip 3. Определите, какие модули включает пакет fuzzywuzzy 4. Изучите модуль для базового сравнения строк fuzz(входит в пакет), получите список доступных атрибутов. 5. Изучите синтаксис метода для базового нечеткого сравнения строк ratio() (входит в состав модуля fuzz). Прим.: Данный метод возвращает индекс схожести 2 срок 6. Воспользуйтесь методом ratio() для сравнения следующих срок: 1) 'Плохой код на самом деле не плохой.' и 'Его просто не так поняли.' 2) 'Работает? Не трогай.' и 'Работает? Не трогай.' 3) 'Работает? Не трогай.' и 'Работает? Не трогай!
Решение - Терминал
# 2. Установите пакет fuzzywuzzy с помощью менеджера пакетов pip $ pip3 install fuzzywuzzy Collecting fuzzywuzzy Downloading fuzzywuzzy-0.18.0-py2.py3-none-any.whl (18 kB) Installing collected packages: fuzzywuzzy Successfully installed fuzzywuzzy-0.18.0
Решение - Интерактивный режим
# 3. Определите, какие модули включает пакет fuzzywuzzy >>> help('fuzzywuzzy') Help on package fuzzywuzzy: NAME fuzzywuzzy - # -*- coding: utf-8 -*- PACKAGE CONTENTS StringMatcher fuzz process string_processing utils VERSION 0.18.0 FILE /usr/local/lib/python3.7/site-packages/fuzzywuzzy/__init__.py # 4. Изучите модуль для базового сравнения строк fuzz(входит в пакет): импортируйте его и получите список доступных атрибутов. >>> from fuzzywuzzy import fuzz >>> dir(fuzz) ['QRatio', 'SequenceMatcher', 'UQRatio', 'UWRatio', 'WRatio', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__warningregistry__', '_process_and_sort', '_token_set', '_token_sort', 'partial_ratio', 'partial_token_set_ratio', 'partial_token_sort_ratio', 'platform', 'ratio', 'token_set_ratio', 'token_sort_ratio', 'unicode_literals', 'utils', 'warnings'] # 5. Изучите синтаксис метода для базового нечеткого сравнения строк ratio() >>> help(fuzz.ratio) Help on function ratio in module fuzzywuzzy.fuzz: ratio(s1, s2) # 6. Воспользуйтесь методом ratio() для сравнения срок >>> fuzz.ratio('Плохой код на самом деле не плохой.', 'Его просто не так поняли.') 33 >>> fuzz.ratio('Работает? Не трогай.', 'Работает? Не трогай.') 100 >>> fuzz.ratio('Работает? Не трогай.', 'Работает? Не трогай!') 95
