Функции

Чем больше программа, тем чаще один и тот же код повторяется. Копировать его — путь к беспорядку. Лучше завернуть кусок кода в свою функцию: описал один раз, а вызываешь когда нужно одной строкой. Сегодня научимся делать функции и соберём мини-РПГ, где удар героя — это функция.

Робот-герой сражается с монстром: функция-приём наносит удар

def — своя команда

Функцию создают словом def (от англ. define — «определить»): пишут имя, скобки и двоеточие, а тело — с отступом. Это только ОПИСАНИЕ. Чтобы функция сработала, её нужно ВЫЗВАТЬ — написать её имя со скобками.

def privet():
    print("Привет!")

privet()
privet()
Привет!
Привет!
  def — ОПИСАТЬ функцию (один раз):
      def privet():
          print("Привет!")

  ВЫЗВАТЬ — сколько угодно раз:
      privet()   -->  Привет!
      privet()   -->  Привет!
Только def — функция описана, но молчит. Сработает она лишь когда её вызовут: privet(). Описал один раз — вызывай сколько угодно.

Параметры и return: вход и выход

Функции можно передавать данные — через параметры в скобках. А чтобы функция вернула результат (а не просто напечатала), используют return: он отдаёт значение обратно, и его можно сохранить в переменную или использовать дальше.

def kvadrat(x):
    return x * x

rezultat = kvadrat(3)
print(rezultat)
print(kvadrat(5))
9
25
  Функция — это «машинка»: вход -> обработка -> выход

      параметр (вход)
          |
          v
   ┌──────────────────────────┐
   │  def kvadrat(x):          │
   │      return x * x         │
   └──────────────────────────┘
          |
          v
      return (выход)

  kvadrat(3)  -->  9
Разница: print просто показывает текст на экране, а return ОТДАЁТ значение обратно в программу — его можно положить в переменную и считать дальше. В расчётах нужен именно return.

Упражнение: мини-РПГ «сражение»

Скопируй и запусти. Удар — это функция udar: она бросает случайный урон и возвращает его. Герой и монстр бьют по очереди в цикле, пока у кого-то не кончится здоровье.

import random

def udar(imya):
    uron = random.randint(5, 15)
    print(imya, "наносит удар на", uron)
    return uron

geroy_hp = 50
monstr_hp = 50
while geroy_hp > 0 and monstr_hp > 0:
    monstr_hp = monstr_hp - udar("Герой")
    geroy_hp = geroy_hp - udar("Монстр")
    print("HP — Герой:", geroy_hp, "| Монстр:", monstr_hp)

if geroy_hp > 0:
    print("Победа!")
else:
    print("Увы, поражение.")
Герой наносит удар на 12
Монстр наносит удар на 7
HP — Герой: 43 | Монстр: 38
...
Победа!
  • Сделай героя сильнее: поменяй диапазон урона в функции udar.
  • Добавь функцию lechenie(), которая возвращает + немного HP, и вызывай её иногда.
  • Заведи стартовое HP через input — пусть игрок сам выбирает сложность.
Смотри, как удобно: логику удара написали ОДИН раз в функции, а вызвали и за героя, и за монстра. Не пришлось копировать код дважды — в этом вся сила функций.

Контрольный вопрос. Зачем нужны функции (def)?

АЧтобы описать кусок кода один раз и вызывать его сколько угодно, не повторяя
БЧтобы программа работала быстрее в любом случае
ВЧтобы заменить команду print

Подсказка: Главная идея — не копировать один и тот же код, а завернуть его и переиспользовать.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что выведет программа из этого задания? Впиши число.

Исходный код для этого задания:

def kvadrat(x):
    return x * x

print(kvadrat(3))

Подсказка: kvadrat(3) подставит x = 3 и вернёт 3 * 3.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что выведет программа из этого задания? Впиши то, что появится (без кавычек).

Исходный код для этого задания:

def privet(imya):
    return "Привет, " + imya

print(privet("Аня"))

Подсказка: В функцию передаётся imya = «Аня». Она склеивает «Привет, » и имя.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что выведет программа из этого задания? Впиши число.

Исходный код для этого задания:

def summa(a, b):
    return a + b

print(summa(2, 3))

Подсказка: Функция получает a = 2 и b = 3 и возвращает их сумму.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Чем return отличается от print внутри функции?

Аreturn ОТДАЁТ значение обратно (его можно сохранить и использовать), print только показывает на экране
БЭто одно и то же
Вreturn показывает текст красным цветом

Подсказка: Подумай: можно ли результат print положить в переменную и посчитать с ним дальше?

Онлайн-проверка ответа появится позже

Задание. Напиши код сам. Напиши строку-заголовок функции с именем privet, без параметров. (Только строку с def и двоеточием.)

Исходный код для этого задания:

# напиши ниже строку-заголовок функции privet без параметров
    print("Привет!")

Подсказка: Шаблон: def имя():. Скобки пустые, в конце двоеточие.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Онлайн-проверка ответа появится позже

Задание. Напиши код сам. Напиши строку-заголовок функции с именем udar и одним параметром uron. (Только строку с def и двоеточием.)

Исходный код для этого задания:

# напиши ниже строку-заголовок функции udar с параметром uron
    print("Удар на", uron)

Подсказка: Шаблон: def имя(параметр):. Параметр пишут в скобках.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Онлайн-проверка ответа появится позже

Задание. Напиши код сам. Функция udar уже описана. Напиши строку, которая ВЫЗОВЕТ её с аргументом 10.

Исходный код для этого задания:

def udar(uron):
    print("Удар на", uron)

# напиши ниже строку, которая вызовет udar с числом 10

Подсказка: Вызов — это имя функции и аргумент в скобках. Шаблон: имя(значение).

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Онлайн-проверка ответа появится позже

Задание. Напиши код сам. Функция посчитала результат в переменную rezultat, но не возвращает его. Напиши недостающую строку, которая вернёт rezultat обратно.

Исходный код для этого задания:

def schitat(a, b):
    rezultat = a + b
    # напиши тут строку, которая вернёт rezultat

Подсказка: return отдаёт значение обратно в программу. Шаблон: return имя_переменной.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Программа из этого задания ничего не выводит на экран. Почему?

Исходный код для этого задания:

def privet():
    print("Привет!")
АФункцию только описали (def), но ни разу не вызвали — нет строки privet()
БВ функции ошибка в слове print
ВНужно убрать отступ перед print

Подсказка: def только описывает функцию. Что нужно сделать, чтобы она сработала?

Онлайн-проверка ответа появится позже

Что дальше

Теперь ты умеешь наводить порядок в коде своими функциями: описал раз — вызывай сколько нужно, передавай данные и получай результат. С этим арсеналом мы переходим к самому красивому — рисованию. В следующем разделе подключим черепашью графику и нарисуем первые картинки.

Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева