Функции
1 # Код функции say_hello() 2 def say_hello(current_hour): 3 if current_hour <= 5 or current_hour >= 23: 4 print('Доброй ночи!') 5 elif current_hour >= 6 and current_hour <= 11: 6 print('Доброе утро!') 7 elif current_hour >= 12 and current_hour <= 17: 8 print('Добрый день!') 9 elif current_hour >= 18 and current_hour <= 22: print('Добрый вечер!') 10 # Дальше код написан без отступов: этот код уже вне функции. 11 # Несколько раз вызовем функцию say_hello() с разными аргументами: 12 say_hello(4) # Вызов функции say_hello() с аргументом 4 13 say_hello(10) # Вызов функции с аргументом 10 14 say_hello(15) # Ещё один вызов функции 15 say_hello(20) # И ещё один вызов
У функции могут быть позиционные и именованные аргументы
Примеры: def print_home(name='Инкогнито', planet='Икс'): print(name + ' живёт на планете ' + planet) print_home('Земля') # результат:<Земля живёт на планете Икс>. Т.к. по умолчанию Земля присвоилось первому аргументу.
Пример 2: # Добавим значение по умолчанию для аргумента name def print_home(name='Инкогнито', planet='Икс'): print(name + ' живёт на планете ' + planet) # Передаём именованный параметр: # явно указываем, что значение 'Земля' предназначено для параметра planet print_home(planet='Земля') # Ещё раз вызовем функцию: передадим два именованных параметра, # но не в том порядке, как они указаны в объявлении функции: print_home(planet='Земля', name='Винни Пух') # результат: Инкогнито живёт на планете Земля Винни Пух живёт на планете Земля
Примеры:
1 def lets_go(name='Друг', target='учить Python'): print(name + ', пойдём ' + target) # Исправьте вызов так, чтобы аргумент был передан # в параметр с именем target lets_go(target='читать следующий урок!')
2 # Настройте функцию так, чтобы она не сломалась при вызове без аргументов def lets_go(name, target): print(name + ', пойдём ' + target) # Вызовите функцию lets_go без аргументов lets_go(name='Друг', target='учить Python')
Возврат значения функции
Пример кода и объяснение:
# Функция для вычисления площади прямоугольника; # от англ. calculate, «вычислять» def calc_square(side_a, side_b): # Вычисляем площадь и присваиваем результат переменной result result = side_a * side_b # Функция возвращает значение переменной result: return result # Вызываем функцию calc_square() с аргументами 16 и 9. # Значение, которое вернёт функция, будет присвоено переменной rectangle_area rectangle_area = calc_square(16, 9) print(rectangle_area)
В данном коде написана функция для вычисления сторон прямоугольника. Переменная result является результатом, который надо вернуть. Поэтому после return указываем result. Другими словами, вся эта функция теперь равна result. Но чтобы получить result, необходимо вызвать функцию.
Вызвать ее можно несколькими способами: 1. Так,как в коде 2. Просто написав команду print(calc_square(16, 9) 3. Либо через f-строку: print(f'Площадь прямоугольника равна{calc_square(16, 9)}')
Пример:
Напишем небольшую программу, которая вычислит и напечатает суммарную площадь трёх жилых комнат, размеры которых нам известны: 3х5, 4х6 и 3х6 метров. Для этого пригодится та же функция calc_square()
.
def calc_square(side_a, side_b): result = side_a * side_b return result room1 = calc_square(3, 5) room2 = calc_square(4, 6) room3 = calc_square(3, 6) rooms_sum = room1 + room2 + room3 print('Суммарная площадь комнат равна', rooms_sum, 'кв.м') # второй вариант - ниже print(f'Суммарная площадь комнат равна {room1 + room2 + room3}, кв.м')
Т.е. функция считает площадь, она выступает как формула. Далее переменным присваиваются значения функции по аргументам.
Вызовы функции из функции
В основной функции (красная жирная линия) вызываются два другие, написанные ранее.
Задачи. Ниже задачи, которые уже были решены
Задача 1.
Анфисе очень часто приходится объяснять пользователям, кто она такая. Практичным решением будет создать функцию и поместить в неё код, печатающий эти сообщения. Тогда из любой части программы можно будет вызвать эту функцию — и Анфиса расскажет о себе. На основе заготовленного кода напишите функцию say_about()
для вывода приветственного сообщения Анфисы. Вызовите эту функцию, чтобы убедиться, что все работает так, как ожидалось.
Ответ: # Здесь объявите функцию say_about() def say_about(): # Код, написанный ниже, переместите в тело объявленной функции print('Привет, я Анфиса!') print('Я персональный помощник.') print('Я ещё маленькая,') print('но постоянно расту и умнею:') print('ведь мой код каждый день дописывают!') # Ниже вызовите объявленную вами функцию say_about() say_about()
Задача 2.
На основе заготовленного кода напишите функцию print_friends_count()
для вывода количества друзей. При вызове в функцию должно передаваться количество друзей. Параметр функции должен называться friends_count
.Вызовите эту функцию с разными аргументами не менее трёх раз. Функция должна сообщать о количестве друзей при любых целых положительных значениях переменной friends_count
. Для количества друзей < 20, фраза должна корректно склоняться. Если же друзей очень много — двадцать или больше, — должно выводиться сообщение 'Ого, сколько у тебя друзей! Целых {friends_count}'
# Объявите функцию здесь def print_friends_count(friends_count): # Код, написанный ниже, переместите внутрь объявленной вами функции if friends_count == 0: print('У тебя нет друзей') elif friends_count == 1: print('У тебя', friends_count, 'друг') elif friends_count >= 2 and friends_count <= 4: print('У тебя', friends_count, 'друга') elif friends_count >= 5 and friends_count < 20: print('У тебя', friends_count, 'друзей') else: print('Ого, сколько у тебя друзей! Целых', friends_count print_friends_count(5) print_friends_count(20) print_friends_count(8)
Пример вложения функции в функции: