Задачи по 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
- Реклама на сайте
Как решить задачу в питоне
Специфика типа данных словарь (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
Задачи по Python для начинающих от Tproger и GeekBrains
Для обучения программированию на питоне нужны тренировки. Совместно с GeekBrains собрали для вас несколько простых задач на Python 3 c решениями.
Вместе с факультетом Python-разработки GeekUniversity собрали для вас несколько простых задач по Python для обучения и тренировки. Их можно решать в любом порядке.
Обратите внимание, что у любой задачи по программированию может быть несколько способов решения. Чтобы посмотреть добавленный нами вариант решения, кликните по соответствующей кнопке. Все приведённые варианты написаны на Python 3.
Задача 1
Есть список a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] .
Выведите все элементы, которые меньше 5 .
Вариант решения
Самый простой вариант, который первым приходит на ум — использовать цикл for :
for elem in a: if elem < 5: print(elem)
Также можно воспользоваться функцией filter , которая фильтрует элементы согласно заданному условию:
print(list(filter(lambda elem: elem < 5, a)))
И, вероятно, наиболее предпочтительный вариант решения этой задачи — списковое включение:
print([elem for elem in a if elem < 5])
Задача 2
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] ;
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] .
Нужно вернуть список, который состоит из элементов, общих для этих двух списков.
Вариант решения
Можем воспользоваться функцией filter :
result = list(filter(lambda elem: elem in b, a))
Или списковым включением:
result = [elem for elem in a if elem in b]
А можно привести оба списка к множествам и найти их пересечение:
result = list(set(a) & set(b))
Однако в таком случае каждый элемент встретится в результирующем списке лишь один раз, т.к. множество поддерживает уникальность входящих в него элементов. Первые два решения (с фильтрацией) оставят все дубли на своих местах.
Python RegEx: практическое применение регулярок
Задача 3
Отсортируйте словарь по значению в порядке возрастания и убывания.
Вариант решения
Импортируем нужный модуль и объявляем словарь:
import operator d =
Сортируем в порядке возрастания:
result = dict(sorted(d.items(), key=operator.itemgetter(1)))
И в порядке убывания:
result = dict(sorted(d.items(), key=operator.itemgetter(1), reverse=True))
Задача 4
Напишите программу для слияния нескольких словарей в один.
Вариант решения
Допустим, вот наши словари:
dict_a = dict_b = dict_c =
Объединить их можно вот так:
result = <> for d in (dict_a, dict_b, dict_c): result.update(d)
А можно с помощью «звёздочного» синтаксиса:
О звёздочном синтаксисе можно прочитать в нашей статье.
Задача 5
Найдите три ключа с самыми высокими значениями в словаре my_dict = .
Вариант решения
Можно воспользоваться функцией sorted :
result = sorted(my_dict, key=my_dict.get, reverse=True)[:3]
Аналогичный результат можно получить с помощью функции nlargest из модуля heapq :
from heapq import nlargest result = nlargest(3, my_dict, key=my_dict.get)
Читайте также: Всё о сортировке на Python
Задача 6
Напишите код, который переводит целое число в строку, при том что его можно применить в любой системе счисления.
Вариант решения
Второй аргумент функции int отвечает за указание основания системы счисления:
Задача 7
Нужно вывести первые n строк треугольника Паскаля. В этом треугольнике на вершине и по бокам стоят единицы, а каждое число внутри равно сумме двух расположенных над ним чисел.
Вариант решения
def pascal_triangle(n): row = [1] y = [0] for x in range(max(n, 0)): print(row) row = [left + right for left, right in zip(row + y, y + row)] pascal_triangle(6)
Задача 8
Напишите проверку на то, является ли строка палиндромом. Палиндром — это слово или фраза, которые одинаково читаются слева направо и справа налево.
Вариант решения
Тут всё просто, достаточно сравнить строку с её обратной версией, для чего можно использовать встроенную функцию reversed:
def is_palindrome(string): return string == ''.join(reversed(string)) print(is_palindrome('abba'))
Того же эффекта можно добиться с помощью срезов:
def is_palindrome(string): return string == string[::-1] print(is_palindrome('abba'))
Задача 9
Сделайте так, чтобы число секунд отображалось в виде дни:часы:минуты:секунды .
Вариант решения
def convert(seconds): days = seconds // (24 * 3600) seconds %= 24 * 3600 hours = seconds // 3600 seconds %= 3600 minutes = seconds // 60 seconds %= 60 print(f':::') convert(1234565)
Задача 10
Вы принимаете от пользователя последовательность чисел, разделённых запятой. Составьте список и кортеж с этими числами.
Вариант решения
values = input('Введите числа через запятую: ') ints_as_strings = values.split(',') ints = map(int, ints_as_strings) lst = list(ints) tup = tuple(lst) print('Список:', lst) print('Кортеж:', tup)
Задача 11
Выведите первый и последний элемент списка.
Вариант решения
lst = [1, 2, 3, 4, 5] print(f'Первый: ; последний: ')
Задача 12
Напишите программу, которая принимает имя файла и выводит его расширение. Если расширение у файла определить невозможно, выбросите исключение.
Вариант решения
def get_extension(filename): filename_parts = filename.split('.') if len(filename_parts) < 2: # filename has no dots raise ValueError('the file has no extension') first, *middle, last = filename_parts if not last or not first and not middle: # example filenames: .filename, filename., file.name. raise ValueError('the file has no extension') return filename_parts[-1] print(get_extension('abc.py')) print(get_extension('abc')) # raises ValueError print(get_extension('.abc')) # raises ValueError print(get_extension('.abc.def.')) # raises ValueError
Задача 13
При заданном целом числе n посчитайте n + nn + nnn.
Вариант решения
def solve(n): n1 = n n2 = int(str(n) * 2) n3 = int(str(n) * 3) print(n1 + n2 + n3) solve(5)
Задача 14
Напишите программу, которая выводит чётные числа из заданного списка и останавливается, если встречает число 237.
Вариант решения
numbers = [ 386, 462, 47, 418, 907, 344, 236, 375, 823, 566, 597, 978, 328, 615, 953, 345, 399, 162, 758, 219, 918, 237, 412, 566, 826, 248, 866, 950, 626, 949, 687, 217, ] for x in numbers: if x == 237: break elif x % 2 == 0: print(x)
Задача 15
Напишите программу, которая принимает два списка и выводит все элементы первого, которых нет во втором.
Вариант решения
set_1 = set(['White', 'Black', 'Red']) set_2 = set(['Red', 'Green']) print(set_1 - set_2)
Задача 16
Выведите список файлов в указанной директории.
Вариант решения
from os import listdir from os.path import isfile, join files = [f for f in listdir('/home') if isfile(join('/home', f))] print(files)
Задача 17
Сложите цифры целого числа.
Вариант решения
def sum_digits(num): digits = [int(d) for d in str(num)] return sum(digits) print(sum_digits(5245))
Разработка на Python с нуля: роадмап программиста
Задача 18
Посчитайте, сколько раз символ встречается в строке.
Вариант решения
string = 'Python Software Foundation' string.count('o')
Задача 19
Поменяйте значения переменных местами.
Вариант решения
Можно написать монструозную конструкцию в стиле языка C:
x = 5 y = 10 temp = x x = y y = temp
Но в Python есть более удобный способ для решения этой задачи:
x = 5 y = 10 x, y = y, x
Задача 20
С помощью анонимной функции извлеките из списка числа, делимые на 15.
Вариант решения
nums = [45, 55, 60, 37, 100, 105, 220] result = list(filter(lambda x: not x % 15, nums))
Задача 21
Нужно проверить, все ли числа в последовательности уникальны.
Вариант решения
def all_unique(numbers): return len(numbers) == len(set(numbers))
Задача 22
Напишите программу, которая принимает текст и выводит два слова: наиболее часто встречающееся и самое длинное.
Вариант решения
import collections text = 'lorem ipsum dolor sit amet amet amet' words = text.split() counter = collections.Counter(words) most_common, occurrences = counter.most_common()[0] longest = max(words, key=len) print(most_common, longest)
На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Следите за новыми постами по любимым темам
Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.
Для начинающих
Подписаться на тег
Задачи умеренной сложности
Подписаться на тег
Подписаться на тег
Партнёрский материал
Подписаться на тег
Что думаете?
168 комментариев
Сначала интересные
17 сент 2020 17 сент 2020 в 16:00
чувствую себя тупым.
14 февр 2021 14 февр 2021 в 13:36
oostarkker, как же я тебя понимаю
26 апр 2022 26 апр 2022 в 09:38
oostarkker, как же я вас понимаю
21 июля 2022 21 июля 2022 в 10:40
oostarkker, ля, легко же
ещё 3 комментария
30 сент 2021 30 сент 2021 в 14:59
Расписал решение задачи №2, длинное, но очень простое и универсальное. Списки могут быть абсолютно любыми, их можно поменять местами и т.д. Совет: не пытайтесь сразу пользоваться готовыми функциями пайтона, они могут сыграть с вами злую шутку, когда будете придумывать какой-либо алгоритм для очередной задачки. a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] c = [] for i in range(len(a)): for j in range(len(b)): if a[i] == b[j] and a[i] not in c: c += [a[i]] else: continue for i in range(len(b)): for j in range(len(a)): if b[i] == a[j] and b[i] not in c: c += [b[i]] else: continue c.sort() print(c)
Научный форум dxdy
Как научиться бодро решать задачи используя Python?
Как научиться бодро решать задачи используя Python?
06.06.2021, 15:54
Последний раз редактировалось Cuprum2020 06.06.2021, 16:08, всего редактировалось 2 раз(а).
Добрый день. В январе я записывался на курс по Питону и за четыре месяца я его не осилил (преодолел три раздела из пяти). Хочу попытаться в следующем году, до начала курса семь месяцев, за эти семь месяцев я хочу научиться достаточно быстро решать учебные задачи. Так как тесты предполагают именно это, три полуторачасовых теста по четыре задачи, два двухчасовых по четыре задачи и итоговый четырёхчасовой в 12 задач (приступал к двум первым тестам, оба раза я не успел)
Текущий уровень, три часа решал вот такую задачу (на C):
Цитата:

Шифр Цезаря.
Написать функцию void char_cesar(char ch, int shift), которая изменяет переданный ей символ ch по алгоритму Цезаря с ключом shift. Шифр Цезаря заключается в замене текущего символа на тот, который находится в алфавите на k позиций правее. Например, буква a при сдвиге 2 будет заменена на букву c, буква x при сдвиге 4 будет заменена на букву b, т.к. мы считаем алфавит зацикленным.
Решил вот так:
Используется синтаксис C
void char_cesar ( char * ch , int shift ) {
// ТОЛЬКО ДЛЯ SHIFT >= 0
* ch = ( * ch + shift ) % ( 'z' + 1 ) % 'a' + 'a' ;
}
Самая сложная задача курса Python которую я видел (она не задана как задача, а разбирается в учебных материалах как бонусная) вот такая:
Цитата:
Предположим, что нам нужно сделать программу, которая разгадывает судоку. Пусть поле моделируется списком списков с целыми числами:
Сформулируем рекурсивный алгоритм решения судоку.
Если на поле судоку нет пустых клеток, оно уже решено и надо просто вернуть поле в качестве решения
Если есть пустые клетки, надо вычислить какую-либо пустую клетку, для которой количество возможных вариантов минимально. Попробовать по очереди проверять эти варианты, и, если будет найдено решение, вернуть его
Используется синтаксис Python
from random import shuffle
from copy import deepcopy
from pprint import pprint
def make_assumptions ( sudoku ) :
for i , row in enumerate ( sudoku ) :
for j , value in enumerate ( row ) :
if not value:
values = set ( row ) \
| set ( [ sudoku [ k ] [ j ] for k in range ( 9 ) ] ) \
| set ( [ sudoku [ m ] [ n ] for m in range ( ( i // 3 ) * 3 , ( i // 3 ) * 3 + 3 )
for n in range ( ( j // 3 ) * 3 , ( j // 3 ) * 3 + 3 ) ] )
yield i , j , list ( set ( range ( 1 , 10 ) ) - values )
def solve ( sudoku ) :
if all ( [ k for row in sudoku for k in row ] ) :
return sudoku
assumptions = list ( make_assumptions ( sudoku ) )
shuffle ( assumptions )
x , y , values = min ( assumptions , key = lambda x: len ( x [ 2 ] ) )
for v in values:
new_sudoku = deepcopy ( sudoku )
new_sudoku [ x ] [ y ] = v
s = solve ( new_sudoku )
if s:
return s
return None
pprint ( solve ( field ) )
Вот было бы неплохо научиться подобного уровня сложности задачи решать скажем за полчаса. Стоит отметить что это бонусная задача всего лишь из середины курса
Пока я колеблюсь между чтением книги Лутца "Изучаем Питон" 2011 года и последовательным прохождением курсов Python отсортированных по убыванию популярности на сайте stepik.org
Аргумент в пользу чтения книги: предположительно подробное изложение теоретического материала, аргументы против: книга морально устаревшая, книга слишком толстая (уж для меня то это точно имеет значение), в книге мало задач
Аргументы в пользу курсов: большое количество задач и автоматизированная система тестирования, аргумент против: предположительно скудное изложение теории предполагающее активное использование сторонних материалов
Re: Как научиться бодро решать задачи используя Python?
06.06.2021, 15:59
Очевидный первый же вопрос, без ответа на который обсуждение не имеет смысла - что на самом деле вам надо:
1) научиться программировать;
2) изучить Python;
3) и то, и другое (причем обязательно в комплекте)?
Re: Как научиться бодро решать задачи используя Python?
06.06.2021, 16:06
Pphantom
Пожалуй пункт три, так как лелею намерения стать преподавателем Python на площадке Яндекс Лицея
Re: Как научиться бодро решать задачи используя Python?
06.06.2021, 16:15
Cuprum2020 в сообщении #1521440 писал(а):
Пожалуй пункт три, так как лелею намерения стать преподавателем Python на площадке Яндекс Лицея
Re: Как научиться бодро решать задачи используя Python?
06.06.2021, 16:17
Pphantom
Я чего то не того желаю?
Re: Как научиться бодро решать задачи используя Python?
06.06.2021, 17:19
Упаси боже детей/студентов от таких преподавателей . Полчаса решать задачу на пять минут, включая написание кода и тестирование . Причём явно далеко не оптимальным способом . Нет, я конечно понимаю что "уча других разбираешься сам", но всё же хоть какая-то база нужна же . В том числе и знание стандартных алгоритмов. Без привязки к языку.
Судоку я конечно за полчаса не решу, но лишь из-за большой писанины, так-то рекурсивный спуск вполне очевиден, чего там подробно разбирать непонятно, единственный не совсем тривиальный момент это что решений может и не быть или быть более одного, соответственно надо понимать что в таких случаях делать. Ну и какие данные хранить на каждом шаге рекурсии и по чему пойдёт перебор. В общем минут 15 на обдумывание метода реализации с привязкой к конкретному языку и потом много писанины.
И при этом я не считаю себя достаточно квалифицированным для преподавания программирования кому-то старше детсада.
Мы старые брюзги и нас ждёт судьба динозавров, да? Скоро уже дети будут учить друг дружку, непонятно правда чему .
Re: Как научиться бодро решать задачи используя Python?
06.06.2021, 17:38
Cuprum2020 в сообщении #1521442 писал(а):
Я чего то не того желаю?
Cuprum2020 в сообщении #1516432 писал(а):
Программирование - не моё, пятиминутное видео запросто на три часа отбивает всякое желание продолжать.
За прошедший месяц, надо думать, мало что изменилось.
Ситуацию "программирование - это не мое, но освоить нужно" я понять вполне могу. Но вот такое - уже нет.
Re: Как научиться бодро решать задачи используя Python?
06.06.2021, 18:38
Последний раз редактировалось Cuprum2020 06.06.2021, 18:48, всего редактировалось 1 раз.
Pphantom в сообщении #1521453 писал(а):
За прошедший месяц, надо думать, мало что изменилось.
В общем то да, иной раз даже пять минут плотно упакованной информации для меня немало
Pphantom в сообщении #1521453 писал(а):
Ситуацию "программирование - это не мое, но освоить нужно" я понять вполне могу. Но вот такое - уже нет
Что именно? Разве преподавание ученикам 8-9 классов, пусть и весьма не средним, сложнее освоить чем настоящее программирование? К тому же тут чёткий критерий отбора, надо дойти до финального теста и написать его на 60 баллов из 100 возможных. Хотя дальше мотивационное письмо и онлайн собеседование, но я убеждаю себя что это формальности
Dmitriy40 в сообщении #1521446 писал(а):
Полчаса решать задачу на пять минут, включая написание кода и тестирование
Боюсь на данный момент подобную задачу я не способен решить в принципе, столкнувшись с ней в качестве бонуса для любознательных, где она была подробно и обстоятельно разобрана, я решил отложить этот бонус до лучших времён, да и вообще, меня этот бонус вогнал в депрессию, скажу честно. Пока что слишком сложно
Вообще, ориентируясь на курс языка Си для школьников, мой результат лучше чем у 97,5% начинавших курс и будет ещё лучше так как я намерен решить все 271 задачу из 271, вполне могу оказаться в топ 1%. Поэтому имею наглость считать себя не совсем уж прям безнадёжным
Re: Как научиться бодро решать задачи используя Python?
06.06.2021, 19:11
Cuprum2020 в сообщении #1521466 писал(а):
Что именно? Разве преподавание ученикам 8-9 классов, пусть и весьма не средним, сложнее освоить чем настоящее программирование?
Вообще-то преподавание кому-либо чего-либо предполагает необходимость самому это хорошо знать и уметь. Это не достаточное условие, но необходимое.
Ладно, впрочем, это вопросы скорее к Яндексу.
Re: Как научиться бодро решать задачи используя Python?
06.06.2021, 20:11
Cuprum2020
"Уметь решать задачи" не равно "уметь учить других", даже лишь тоже решать те же задачи. Надо разбираться в вопросе минимум в несколько раз (а лучше на порядок) лучше учеников. При более-менее одинаковом уровне знаний "помогать решать" можно, "учить решать" нет. А уж просто "учить" тем более нет. Ну пусть будет ИМХО.
Re: Как научиться бодро решать задачи используя Python?
06.06.2021, 20:57
Последний раз редактировалось Cuprum2020 06.06.2021, 21:02, всего редактировалось 2 раз(а).
Dmitriy40 в сообщении #1521477 писал(а):
При более-менее одинаковом уровне знаний "помогать решать" можно, "учить решать" нет
Требования к преподавателям выше требований к "суперотличникам" так что всё же уровень предполагается не одинаковый, но и не на порядок конечно. К тому же разве это не может быть педагогическим преимуществом? Такой не слишком удалённый от воспитанников педагог ведь может лучше осознавать стоящие перед учениками проблемы и видеть сложные места, чем тот кто в уме программу на автопилоте генерирует едва увидев условие
Короче никуда мне с завода лучше не дёргаться и молиться, чтобы хватило здоровья на ближайшие лет тридцать, чтобы завод за это время не закрыли, персонал не сократили и меня самого не попросили. А я очень, очень легко заменяем и моя работа роста квалификации не предполагает
Re: Как научиться бодро решать задачи используя Python?
06.06.2021, 21:54
Последний раз редактировалось Dmitriy40 06.06.2021, 22:08, всего редактировалось 1 раз.
Cuprum2020
Да дело не только в автопилоте или скорости генерирования программы, а в знании стандартных подходов, их плюсов и минусов, что вариантов решения больше одного и каждый имеет преимущества и недостатки. Редко когда этим заморачиваются при обучении решения задач.
Вот как пример: в первой задаче выше половину взятий модулей можно сделать однократно заранее, а вторую половину исключить продублировав алфавит, и это два разных метода оптимизации. И останется лишь обращение в массив/таблицу и всё. На тексте в мегабайт разница незаметна, на гигабайтном тексте очень даже.
Плюс, лично для меня, важным признаком преподавателя является умение ответить на "каверзные" вопросы учеников по теме урока, которые могут выходить далеко за рамки урока. Именно для этого нужно знать предмет существенно лучше учеников и учебника. Просто пересказывать учебник - за преподавание не считаю.
Ну и апелляция что вчерашнему школьнику лучше видны затруднения других школьников — довольно спорное утверждение. Ведь он видел лишь свои затруднения, а учитель — затруднения многих и многих, если ещё не на личном примере, то уж его именно этому и учили, типичным ошибкам учеников. И тут широкая выборка заборет личные качества. Исключения редки.
Но вообще то это уже вопрос в "Вопросы преподавания", где я высказываться поостерегусь.
PS. Возможно я слишком идеализирую.
Ой, это я пропустил.
Cuprum2020 в сообщении #1521466 писал(а):
Разве преподавание ученикам 8-9 классов, пусть и весьма не средним, сложнее освоить чем настоящее программирование?
Да, сложнее. Учить других вообще сложнее чем что-то делать самому.
Например самому обычно достаточно решить задачу хоть как-то, пусть даже в жестко заданных рамках (типа олимпиад), но просто решить и всё. А ученикам может понадобиться объяснять почему именно так, почему не по другому, чем другой путь (которых далеко не один) хуже или лучше, уметь быстро и обоснованно оценивать предложенными ими пути решения. Всё это на порядок, а то и два, сложнее чем просто решить задачу. А иногда, математики не дадут соврать, вообще упирается в открытые проблемы. И попытавшись погрузиться в разбор такого вопроса можно попасть в неловкую ситуацию . Понимаете, ученики могут и не знать (да и не должны) что тут засада, но не знать этого учителю . Стыдно. Хотя в истории встречались и прорывы именно из-за такого незнания, но это всё же очень редкие исключения.