Python
Задачи на функции Python
Функции нужны, чтобы отделить логику от ввода и вывода. В этой подборке каждая задача тренирует маленькую функцию, которую можно проверить на нескольких наборах данных
Работайте с подборкой руками: сначала попробуйте написать решение самостоятельно, затем сравните с примером и обязательно измените входные данные. Так задача превращается в навык, а не в просмотр готового ответа
Как заниматься
Для каждой задачи выпишите входные данные, ожидаемый результат и одно главное действие. Если решение не идет, начните с переменных и одного print, а потом добавляйте условие, цикл или функцию
После решения проверьте обычный случай, пустой случай и один неудобный вариант: ноль, отрицательное число, повтор, пробелы в строке или список из одного элемента
Задачи с решениями
Задача 1. Сумма двух чисел
Функция принимает два числа и возвращает сумму
Решение:
def add(a, b):
return a + b
print(add(2, 3))
print(add(-5, 10))
Проверка: функция должна возвращать значение, а не только печатать
Задача 2. Проверка четности
Функция возвращает True, если число четное
Решение:
def is_even(number):
return number % 2 == 0
print(is_even(4))
print(is_even(7))
Проверка: проверьте 0 и отрицательное число
Задача 3. Максимум в списке
Функция возвращает максимальное число или None для пустого списка
Решение:
def find_max(numbers):
if not numbers:
return None
return max(numbers)
print(find_max([3, 8, 2]))
print(find_max([]))
Проверка: проверьте список из одного элемента
Задача 4. Очистка имени
Функция убирает пробелы и приводит имя к нормальному виду
Решение:
def normalize_name(name):
return name.strip().title()
print(normalize_name(" анна "))
Проверка: проверьте пустую строку
Задача 5. Фильтр положительных
Функция возвращает новый список только с положительными числами
Решение:
def only_positive(numbers):
result = []
for number in numbers:
if number > 0:
result.append(number)
return result
print(only_positive([-2, 0, 5, 7]))
Проверка: исходный список не должен меняться
Задача 6. Подсчет слов
Функция возвращает количество слов в строке
Решение:
def count_words(text):
return len(text.split())
print(count_words("python is useful"))
Проверка: проверьте строку из пробелов
По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы
По этой теме полезно отдельно посмотреть Аннотации типов для декораторов в Python, чтобы расширить контекст и сравнить подходы
Как проверять свои решения
Закройте готовый ответ и перепишите решение по памяти. Если приходится постоянно подглядывать, уменьшите задачу: оставьте два элемента, одно условие и один вывод
Хороший признак — вы можете объяснить, какие данные входят в программу, где они меняются и почему результат именно такой
Частые ошибки новичков
- читать решение, но не запускать его
- проверять только один красивый пример
- забывать преобразовать
inputв число - менять список во время перебора без необходимости
- писать слишком общие имена переменных
- путать вывод через
printи возврат черезreturn
Дополнительные задачи
Задача 9. Второй максимум
Найдите второе по величине число в списке
numbers = [5, 1, 9, 9, 3]
unique_numbers = sorted(set(numbers), reverse=True)
if len(unique_numbers) >= 2:
print(unique_numbers[1])
else:
print("Недостаточно разных чисел")
Проверка: проверьте список, где все числа одинаковые
Задача 10. Группировка слов по первой букве
words = ["python", "php", "sql", "swift"]
groups = {}
for word in words:
first_letter = word[0]
groups.setdefault(first_letter, []).append(word)
print(groups)
Проверка: добавьте слово на уже существующую букву
Задача 11. Удаление дублей с сохранением порядка
items = ["a", "b", "a", "c", "b"]
result = []
for item in items:
if item not in result:
result.append(item)
print(result)
Проверка: проверьте пустой список и список без дублей
Задача 12. Простая функция проверки логина
def is_valid_login(login):
login = login.strip()
return len(login) >= 3 and login.isalnum()
print(is_valid_login("user1"))
print(is_valid_login(" a "))
Проверка: проверьте пробелы, короткий логин и символ !
Как усложнять после решения
Добавьте ввод пользователя, вынесите повторяющуюся логику в функцию и напишите три тестовых запуска. Если задача была про список, проверьте пустой список, один элемент и повторы. Если задача была про строку, проверьте пробелы и разный регистр
Еще задачи для закрепления
Задача 13. Индексы четных чисел
Найдите индексы всех четных чисел в списке
Решение:
numbers = [3, 4, 8, 9, 10]
indexes = []
for index, number in enumerate(numbers):
if number % 2 == 0:
indexes.append(index)
print(indexes)
Проверка: проверьте список без четных чисел
Задача 14. Самое длинное слово
Решение:
words = ["python", "sql", "javascript"]
longest = ""
for word in words:
if len(word) > len(longest):
longest = word
print(longest)
Проверка: проверьте два слова одинаковой длины и пустой список
Задача 15. Сумма по категориям
Решение:
items = [
{"category": "food", "amount": 300},
{"category": "books", "amount": 900},
{"category": "food", "amount": 250},
]
totals = {}
for item in items:
category = item["category"]
totals[category] = totals.get(category, 0) + item["amount"]
print(totals)
Проверка: добавьте новую категорию и пустой список
Задача 16. Меню команд
Решение:
commands = ["add", "list", "exit"]
command = "help"
if command in commands:
print("Команда поддерживается")
else:
print("Неизвестная команда")
Проверка: проверьте регистр букв и пробелы по краям
Как повторять задачи
После этой подборки выберите три задачи и решите их заново через день. Первый раз можно смотреть на готовый код, второй раз оставьте только условие, третий раз измените входные данные. Такой повтор быстро показывает, что вы действительно поняли, а что просто узнали глазами
Хорошая самостоятельная проверка выглядит так: вы можете объяснить условие, назвать нужные переменные, написать решение без копирования и добавить один неудобный тест. Если хотя бы один пункт не получается, вернитесь к самой маленькой версии задачи и соберите ее заново
Финальная проверка функций
После всех задач перепишите любые три решения так, чтобы функция ничего не печатала, а только возвращала результат. Это важная привычка: функцию, которая возвращает значение, можно использовать в другой программе и тестировать отдельно
Пример:
def get_average(numbers):
if not numbers:
return 0
return sum(numbers) / len(numbers)
result = get_average([5, 4, 3])
print(result)
Проверьте пустой список, один элемент и несколько элементов. Если функция зависит от input внутри себя, попробуйте переписать ее так, чтобы данные приходили через параметр. Это делает код гибче и понятнее