Занятие № 10. Описание функций пользователя

Цель: научиться применять функции для решения задач и структурирования кода программы.

Теория

Определение функции

Функция – это именованный набор инструкций, которые могут быть выполнены в любом месте программы, после вызова функции.

Для объявление функции используется инструкция def. Инструкция def создаёт новый объект-функцию:

def <имя функции>(<параметры>):
    <блок инструкций>

Строка с инструкцией def называется заголовком функции, а блок инструкций внутри функции называется телом функции. Имя функции следует правилам именования переменных в Python.

Вот пример объявления функции с именем hello, которая выведет на экран два сообщения:

def hello():
"""Это функция приветствует пользователя"""
print("Привет")
print("Рад видеть вас")
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
def hello():
    """Это функция приветствует пользователя"""
    print("Привет")
    print("Рад видеть вас")

Если запустить код выше, то мы не увидим сообщений на экране. Нужно разделять определение функции и её вызов.

Вызов функции

Чтобы вызвать функцию нужно записать её имя и в круглых скобках указать аргументы, если необходимо:

<имя функции>(<аргументы>)

Например чтобы вызвать функцию hello мы запишем следующее: .

Проследите за вызовом функции hello по шагам.

На втором шаге за именем hello закрепляется объект типа function. Это и будет объект, которых хранит описание функции. На шестом шаге мы вызываем функции hello. После этого начнут выполняться инструкции в теле функции. Когда инструкции закончатся, управление вернётся основной программе. В итого в этом примере мы вызываем функцию hello раза.

Сколько строк будет содержать результат работы следующей программы:

def result():
    print("Хорошего дня!")
    print("Успехов в работе")

Параметры и аргументы

Параметры функции - это входные данные, на основе которых функция должна получить требуемый результат. Параметры перечисляются в заголовке определения функции через запятую. В следующем примере функция hello2 принимает два параметра - имя name и количество повторений rep:

def hello2(name, rep):
    msg = " Привет, " + name
    print(msg * rep)

При вызове такой функции мы должны указать необходимые аргументы - буквальные значения или выражения, которые сопоставляются с параметрами в определении функции. Если мы запишем hello2("Света", 3), значит параметр name примет строковое значение "Света", а параметр rep будет иметь значение равное числу :

def hello2(name, rep):
msg = " Привет, " + name
print(msg * rep)
hello2("Света", 3)
hello2("Дима", 4)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
def hello2(name, rep):
    msg = " Привет, " + name
    print(msg * rep)
    
hello2("Света", 3)
hello2("Дима", 4)

Неизменяемые объекты передаются по значению (числа, строки) и не могут быть изменены в теле функции. Изменяемые объекты передаются по ссылке (списки, словари) и могут быть изменены в теле функции.

Вопрос 1 из 4
 

В каком из предложенных вариантов заголовок функции записан корректно:


Какие параметры есть в объявлении следующей функции:

def print_many(x, y):
    """Печатает строку x, y раз"""
    for i in range(y):
        print(x)

Глядя на следующий код, выберите вариант инструкции с помощью которой можно вызвать объявленную функцию:

def print_many(x, y):
   """Печатает строку x, y раз"""
   for i in range(y):
       print(x)

z = 3

Что выведет на экран следующая программа:

def lng(s1, s2):
   if len(s1) > len(s2):
      print(s1)
   else:
      print(s2)

lng("Привет", "Пока")

Параметры и аргументы в Python могут сопоставляться несколькими способами. При сопоставлении по позиции важен порядок в котором аргументы записаны при вызове функции:

def formatDate(day, month, year):
"""Выводим дату в красивом формате"""
print(f"Сегодня {day}.{month} {year} года")
formatDate(22, 11, 2024) # аргументы в правильном порядке
formatDate(11, 2024, 22) # аргументы перепутаны
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
def formatDate(day, month, year):
    """Выводим дату в красивом формате"""
    print(f"Сегодня {day}.{month} {year} года")

formatDate(22, 11, 2024) # аргументы в правильном порядке
formatDate(11, 2024, 22) # аргументы перепутаны

Сопоставление по имени позволяет записывать аргументы в произвольном порядке но нужно указать имена параметров из заголовка функции:

def formatDate(day, month, year):
print(f"Сегодня {day}.{month} {year} года")
# аргументы в произвольном порядке
formatDate(month=11, year=2024, day=22)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
def formatDate(day, month, year):
    print(f"Сегодня {day}.{month} {year} года")

# аргументы в произвольном порядке
formatDate(month=11, year=2024, day=22) 

В объявлении функции можно указать значения по умолчанию для параметров:

def formatDate(day, month, year=2024):
print(f"Сегодня {day}.{month} {year} года")
formatDate(1, 9)
formatDate(1, 9, 1991)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
def formatDate(day, month, year=2024):
    print(f"Сегодня {day}.{month} {year} года")

formatDate(1, 9)
formatDate(1, 9, 1991)

Так как при вызове функции formatDate(1, 9) не указано значение параметра year, при выполнении функции будет использовано значение по умолчанию равное .

Возвращаем значение - return

Функции из примеров выше выполняли набор инструкций, но не возвращали в качестве результата конкретное значение, которое можно было бы использовать в других выражениях. Пример функции возвращающей результат - len(), которая возвращает длину последовательности:

аргумент

return

"банан"

len()

5

Рисунок 1

На вход функция принимает последовательность и возвращает количество элементов в ней.

Чтобы вернуть значение из функции используется инструкция return.

В следующем примере опишем функцию square(x), которая возводит число в квадрат:

def square(x):
y = x * x
return y # возвращаем результат из функции
n = 10
result = square(n)
print("Результат:", result)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
def square(x):
    y = x * x
    return y  # возвращаем результат из функции

n = 10
result = square(n)
print("Результат:", result)

После return записывается выражение, результат которого вычисляется и возвращается в то выражение, откуда была вызвана функция. В коде выше функция square() вызывается в строке.

Если в определении функции нет инструкции return то по окончании работы она всё равно вернёт специальное значение None:

def square(x):
y = x * x
# забыли написать return
print("Результат:", square(8))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
def square(x):
    y = x * x
    # забыли написать return

print("Результат:", square(8))

После выполнения инструкции return функция прекращает свою работу. Если какие-либо инструкции были записаны после return, они выполняться не будут:

def year():
print("Функция запустилась")
return 2024
print("Это строка не выполнится")
return 2007 # эта тоже
x = year()
print(x)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
def year():
    print("Функция запустилась")
    return 2024
    print("Это строка не выполнится")
    return 2007 # эта тоже

x = year()
print(x)

Но стоит понимать, что в функции может быть несколько инструкций return:

def year(val):
if val == 2024:
return "Текущий год"
elif val < 2024:
return "Прошлый год"
else:
return "Будущее"
x = year(1991)
print(x)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
def year(val):
    if val == 2024:
        return "Текущий год"
    elif val < 2024:
        return "Прошлый год"
    else:
        return "Будущее"

x = year(1991)
print(x)

Если в примере выше вызвать функцию year(2077), то она вернёт строку .

Вопрос 1 из 2
 

Что не так в определении данной функции:

def addEm(x, y, z):
    return x+y+z
    print('Ответ', x+y+z)

Что будет выведено на экран после выполнения следующего кода:

def square(x):
    y = x * x
    return y

print(square(square(2)))

Функции - это объекты (щелкните, чтобы открыть)

Каждая функция в Python - это объект на который может ссылаться несколько имён, их можно сделать элементами списка или словаря.

def summa(a, b):
return a + b
s = summa # теперь на функцию ссылаются два имени - summa и s
print(summa(3, 2))
print(s(3, 2))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

s = summa # теперь на функцию ссылаются два имени - summa и s
print(summa(3, 2))
print(s(3, 2))

В следующем примере три функции помещаем в список и перебираем этот список с помощью цикла for:

def summa(a, b):
return a + b
def mult(a, b):
return a * b
def power(a, b):
return a ** b
func_lst = [summa, mult, power] # список функций
x = 4
y = 3
for func in func_lst:
# на каждой итерации func ссылается на очередную функцию
value = func(x, y)
print(value)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
def summa(a, b):
    return a + b
def mult(a, b):
    return a * b
def power(a, b):
    return a ** b

func_lst = [summa, mult, power] # список функций

x = 4
y = 3
for func in func_lst:
    # на каждой итерации func ссылается на очередную функцию
    value = func(x, y)
    print(value)

Перейдите по ссылке, если хотите проследить за пошаговым выполнение этой программы.

Примеры

Пример № 1 (ex01.py)

С помощью модуля turtle изобразите четыре квадрата следующим образом:

Для рисования маленького квадрата опишите функцию.

from turtle import Turtle
robot = Turtle() # создаём экземпляр класса Turtle
def square(t):
"""
Рисование квадрата
t - ссылка на робота-исполнителя
"""
for i in range(4):
t.forward(100)
t.right(90)
square(robot)
robot.left(90)
square(robot)
robot.left(90)
square(robot)
robot.left(90)
square(robot)
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
from turtle import Turtle

robot = Turtle() # создаём экземпляр класса Turtle

def square(t):
    """
    Рисование квадрата
    t - ссылка на робота-исполнителя
    """
    for i in range(4):
        t.forward(100)
        t.right(90)

square(robot)
robot.left(90)
square(robot)
robot.left(90)
square(robot)
robot.left(90)
square(robot) 

Пример № 2 (ex02.py)

Опишите функцию circle_s(R) находящую площадь круга радиуса R. С помощью данной функции вычислите площади трёх кругов. Радиусы вводятся с клавиатуры.

import math
#начало объявления функции
def circle_s(R):
S = math.pi * R ** 2
return S
# вводим значения радиусов
r1 = float(input("Введите r1: "))
r2 = float(input("Введите r2: "))
r3 = float(input("Введите r3: "))
#применяем функцию
print("S1: ", circle_s(r1))
print("S2: ", circle_s(r2))
print("S3: ", circle_s(r3))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      
import math

#начало объявления функции
def circle_s(R):
    S = math.pi * R ** 2
    return S

# вводим значения радиусов
r1 = float(input("Введите r1: "))
r2 = float(input("Введите r2: "))
r3 = float(input("Введите r3: "))

#применяем функцию
print("S1: ", circle_s(r1))
print("S2: ", circle_s(r2))
print("S3: ", circle_s(r3))

Задания для самостоятельной работы

Задание № 1 (sam01.py)

Опишите функцию coord(x,y) которая определяет, в какой координатной четверти располагается точка с координатами (x, y):

Шаблон программы:

# вместо этого коментария опишите необходимую функцию

# не исправляйте данный код
coord(2, 6)
coord(-10, 8)
coord(-5, -9)
coord(10, -3)

Пример:

Точка (2, 6) располагается в 1 четверти
Точка (-10, 8) располагается в 2 четверти
Точка (-5, -9) располагается в 3 четверти
Точка (10, -3) располагается в 4 четверти

Задание № 2 (sam02.py)

Опишите функцию sphere_volume(r) вычисляющую объём шара. Для вычислений используйте следующую формулу:

V=43πr3

Шаблон:

# вместо этого коментария опишите необходимую функцию

# не исправляйте данный код
v1 = sphere_volume(3)
v2 = sphere_volume(8)
v3 = sphere_volume(5.6)
print(f"v1={v1:.1f} v2={v2:.1f} v3={v3:.1f}")

Пример:

v1=113.1 v2=2144.7 v3=735.6

Задание № 3 (sam03.py)

Опишите функцию sum_list(nums) находящую сумму чётных чисел хранящихся в списке nums. Если список пуст, сумма считается равной нулю.

Шаблон:

# вместо этого коментария опишите необходимую функцию

# не исправляйте данный код
s1 = sum_list([10])
s2 = sum_list([4, 5, 9, -2])
s3 = sum_list([])
print(f"s1={s1} s2={s2} s3={s3}")

Пример:

s1=10 s2=2 s3=0

Задание № 4 (sam04.py)

Создайте функцию create_email(msg, sub, sign), где msg - текст сообщения, sub - тема письма, sign - подпись автора письма. Тема письма, сообщение и подпись выводятся с новой строки.

В определении функции должны использоваться параметры по умолчанию:

  • если тема (sub) не указана, то используется строка Важное сообщение
  • если подпись (sign) не указана, то используется строка С уважением, друг

Шаблон:

# вместо этого коментария опишите необходимую функцию

# не исправляйте данный код
create_email("Завтра собрание")
print()
create_email("Сегодня тест", sub="Напоминание")
print()
create_email("Скоро сессия", sub="Привет", sign="Одногруппник")

Пример:

Тема: Важное сообщение
Завтра собрание
Подпись: С уважением, друг

Тема: Напоминание
Сегодня тест
Подпись: С уважением, друг

Тема: Привет
Скоро сессия
Подпись: Одногруппник

Задание № 5 (sam05.py)

Опишите функцию random_answer, которая принимает в качестве аргумента одну или несколько строк. Функция возвращает случайную строку из переданных.

Для решения используйте функцию randint из модуля random.

Шаблон:

import random

# вместо этого коментария опишите необходимую функцию

# не исправляйте данный код
print(random_answer("возможно"))
print(random_answer("да", "нет"))
print(random_answer("наверное", "определённо", "не нужно", "точно"))

Запустите программу несколько раз. После каждого запуска ответы могут быть разными (кроме первого ответа, который всегда равен строке “возможно”).

Пример:

Ответ: возможно
Ответ: да
Ответ: определённо

Задание № 6 (sam06.py)

Даны длины сторон треугольника a, b и с. Найдите площадь треугольника, используя формулу Герона.

Формула Герона:

s=p(pa)(pb)(pc)

где p - полупериметр:

p=a+b+c2

Опишите две функции - pol(a, b, c) для нахождения полупериметра и geron(a, b, c) для вычисления площади.

Шаблон:

# вместо этого коментария опишите необходимые функции

# не исправляйте данный код
x = 3
y = 6
z = 7
print("Полупериметр", pol(x, y, z))
s = geron(x, y, z)
print(f"s={s:.2f}")

Пример:

Полупериметр 8.0
s=8.94