Примеры работы с функциями#

Площадь треугольника#

Даны стороны треугольника a,b,c. Написать функцию вычисления площади труегольника по формуле Герона:

asda

Площадь треугольника 2#

Написать функцию, определяющую количество переданных аргументов и вычисляющий площадь треугольника по следующему принципу:

3 аргумента - формула Герона 2 аргумента - половина основания на высоту

Примечание: Так как количество параметров будет переменным и неважно, как их именуют, то исполоьзуем *args

Количество букв разных регистров#

Напишите функцию Python, которая принимает строку и подсчитывает количество прописных и строчных букв.

Вход: “The quick Brow Fox”

Выход:

Символов в ВЕРХНЕМ регистре : 3

Символов в нижнем регистре : 12

Площадь круга (lambda)#

Написать функцию lambda для вычисления площади круга произвольного радиуса r

ФИО#

ФИО В файле “сотрудники.txt” приведен спиок сотрудников отдела. Написать программу, формирующую новый файл с фамилиями и инициалами сотрудников для сдачи теста по Технике безопасности.

Формирование списка с фамилиями и инициалами выполнить в виде функции.

def unpack_list(*args):
        """
        Функция, формирующая из списка фамилий, имен и отчеств список из фамилий и инициалов

        Вход: *args - список переменной длины
        Выход: person2_lst - список из фамилий и инициалов в формате Фамилия И. О.
        """

        # Cписок для Фамилия И. О.
        person2_lst = []
        # Для каждой строки в полученном кортеже повторять:
        for line in args:
                # Распаковать строку в переменные l_n - фамилия, f_n - имя, m_n - отч
                l_n, f_n, m_n = line.split()
                # Добавить в новый список l_n - фамилия, f_n - имя[0], m_n - отч[0]
                person2_lst.append(l_n + ' ' + f_n[0] + '. ' + m_n[0] + '.\n')

        # Возврат сформированного списка
        return person2_lst


with open('сотрудники.txt',encoding='UTF-8') as f:
        lst = f.readlines()

result = unpack_list(*lst)
# Печать списка
print('Готовый список')
print('-'*20)

print(result)
# Печать распакованного списка (извлеченные элементы)
print('\nРаспакованный список')
print('-'*20)
print(*result)

Средний балл#

В файле marks.csv находятся текущие оценки студентов. Создать скрипт для расчета рейтинга студентов.

from pprint import pprint
# Создание пустых списков для:
# фамилий
person_lst=[]
# оценок
marks_lst = []
# Открытие контекста для файла
with open ('marks.csv') as f:
        # Для каждой считанной из фала строки повторять
        for line in f:
                # Разбить строку по разделителю ";"
                s = line.split(';')
                # p - фамилия из полученного списка
                # m - все оценки
                p, m = s[0],s[1:]
                # Добавить фамилию в список person_lst
                person_lst.append(p)
                # Добавить оценки в список marks_lst, предварительно приведя к типу int
                marks_lst.append(list(map(int,m)))
​
# Расчет среднего балла для каждого студента
average_scores = list(map(lambda x : round(sum(x) / len(x),2), marks_lst))
​
print(average_scores)
​
[4.0, 3.86, 3.71, 4.0, 3.86, 4.21, 3.86, 4.07, 4.0, 3.57]
# Создать пары фамилия - средний балл
my_list = list(zip(person_lst,average_scores))
​
# Отсортировать по убыванию (reverse=True) полученный список
# по значению среднего балла (key=lambda x: x[1])
my_list = sorted(my_list,key=lambda x: x[1],reverse=True)
# Напечатать список в презентабельном виде
pprint(my_list)
[('Сазонов', 4.21),
 ('Солопов', 4.07),
 ('Глуховская', 4.0),
 ('Моисеева', 4.0),
 ('Шатыренок', 4.0),
 ('Дубова', 3.86),
 ('Наумов', 3.86),
 ('Скоробогатов', 3.86),
 ('Зиновьева', 3.71),
 ('Шахмагонова', 3.57)]
# и передать в файл для отправки в учебную часть в отформатированном виде
# фамилия - средний балл
​
my_raiting = list(map(list,my_list))
​
​
with open ('raiting.txt','w',encoding='UTF-8') as f:
        for person in my_raiting:
                f.write(f'{person[0]} - {person[1]}\n')
asda
with open ('raiting1.txt','w',encoding='UTF-8') as f:
        for person in my_raiting:
                # На колонку с фамилией отводится 20 символов, на средний балл - 4
                f.write("{:20}{:4}\n".format(person[0], person[1]))
asda

Список студентов с заданным рейтингом#

Из файла raiting1.txt, сфорированного ранее, вывести студентов, чей рейтинг больше или равен 4 баллов

full_lst = []
# Открыть файл для чтения
with open ('raiting1.txt','r',encoding='UTF-8') as f:
                # Считать все в список и разбить каждый элемент
                full_lst = list(map(lambda x: x.split(),f.readlines()))
full_lst
[['Сазонов', '4.21'],
 ['Солопов', '4.07'],
 ['Глуховская', '4.0'],
 ['Моисеева', '4.0'],
 ['Шатыренок', '4.0'],
 ['Дубова', '3.86'],
 ['Наумов', '3.86'],
 ['Скоробогатов', '3.86'],
 ['Зиновьева', '3.71'],
 ['Шахмагонова', '3.57']]
my_filter = list(filter(lambda x: float(x[1])>=4.0, full_lst))
my_filter
[['Сазонов', '4.21'],
 ['Солопов', '4.07'],
 ['Глуховская', '4.0'],
 ['Моисеева', '4.0'],
 ['Шатыренок', '4.0']]

Пояснение

lambda x: float(x[1])>=4.0 - каждый аргумент списка full_lst является списком (вложенный). Средний балл - это элемент с индексом 1 (x[1]). Он преобразовывется в вещественное число (float) и сравнивается с 4.0. Если результат True, то и весь элемент попадает в итоговый набор.