Контрольная работа (композиция)

Есть много ящиков с разными фруктами: яблоками, виноградом, грушами, персиками и так далее. Их надо сосчитать.

Напишем класс Counter, в котором будем считать сколько ящиков одного и того же фрукта было:

class Counter(object):
    def __init__(self, name=''):
        self.name = name
        self.n = 0

    def count(self, data):
        self.n += 1

    def metric(self):
        return self.n

    def __repr__(self):
        return '{}: {}'.format(self.name, self.metric())

apple = Counter('apples')
grapes = Counter('grapes')
apple.count(5)
apple.count(3.5)
grapes.count(4)
print(apple)                # apples: 2
print(grapes)               # grapes: 1

Задача 1. Метрика

Сейчас в методе count(data) аргумент data (сколько кг фруктов в этом ящике) не используется. Нужно дописать класс так, чтобы этот аргумент использовался, в классе вычислялась и печаталась:

Номер варианта Что написать Формула
1 sum - сколько всего кг во всех посчитанных ящиках $$(x_1 + x_2 + ..+ x_n)$$
2 avr - сколько в среднем в каждом ящике $$(x_1 + x_2 + ..+ x_n)/n$$
3 min - самое маленькое количество фруктов в ящике $$min(x_1, x_2, .., x_n)$$
4 max - самое большое количество фруктов в ящике $$max(x_1, x_2, .., x_n)$$
5 sum2 - квадрат суммы всех ящиков $$(x_1 + x_2 + ..)^2$$
6 x2 - сумма квадратов всех ящиков $$({x_1}^2 + {x_2}^2 + ..)$$
7 dev = max - min = $$max(x_1, x_2, .., x_n) - min(x_1, x_2, .., x_n)$$
8 stddev = $$abs({x_1}^2 + {x_2}^2 + .. - (x_1 + x_2 + ..)^2)/n $$

Задача 2. Прочитать данные, посчитать метрику

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

Прочитать данные о фруктах, посчитать и напечатать их метрику с помощью класса Counter.

Вариант 0

Фрукт и сколько килограмм через пробел.

apple 5
apple 3.5
grapes 2.7
orange 10
orange 3.5

Вариант 1

Фрукт : сколько килограмм.

apple:5
apple:3.5
grapes:2.7
orange:10
orange:3.5

Вариант 2

Сколько килограмм - фрукт.

5-apple
3.5-apple
2.7-grapes
10-orange
3.5-orange

Вариант 3

Номер ящика; фрукт ; вес в килограммах.

1;apple;5
2;apple;3.5
3;grapes;2.7
4;orange;10
5;orange;3.5

Вариант 4

Номер ящика / вес в килограммах / фрукт.

1/5/apple
2/3.5/apple
3/2.7/grapes
4/10/orange
5/3.5/orange

Вариант 5

Фрукт (10 символов), далее сколько килограмм.

apple     5
apple     3.5
grapes    2.7
orange    10
orange    3.5

Вариант 6

Сколько килограмм (7 символов) и фрукт.

5    apple
3.5  apple
2.7  grapes
10   orange
3.5  orange

Вариант 7

Номер ящика (3 символа), фрукт (10 символов), далее сколько килограмм.

1  apple     5
2  apple     3.5
3  grapes    2.7
4  orange    10
5  orange    3.5

Задача 3. Переопределить оператор и посчитать

Номер варианта задачи взять у преподавателя.

Номер варианта Оператор Что считать
1 < отсортировать по метрике разные фрукты
2 < найти минимум по метрике среди разных фруктов
3 > найти максимум по метрике среди разных фруктов
4 + добавить данные другого отчета (другой экземпляр Counter)
5
6
7
8

Защита полей от записей

Прямоугольник

Задан прямоугольник координатами левой верхней точки х, y и шириной (w) и высотой (h).

Добавьте защиту на изменение данных такую что:

  • при попытке записать отрицательную высоту (ширину) бросалось исключение;
  • при попытке записать отрицательную высоту (ширину) изменялись координаты левой верхней точки так, чтобы ширина и высота были положительными. (Т.е если координата x, y была 1, 2, то при ширине -3 мы трактуем, что "от текущей точки, которую мы считаем левой верхней, отсчитать -3 по ширине и получим противоположный угол; в этом случае координаты левой верхней точки были x = 1+(-3)=-2, y=2, w = 3 (стала полжительной).

Задачи, не вошедшие ни в один семинар

min 1D отрезков

Допишите класс Segment1, чтобы можно было найти наименьший отрезок из данных.

Даны отрезки по 1 отрезку на строку. Напечатать самый короткий отрезок. Если несколько отрезков такой длины, то взять из них самый левый.

sort 1D отрезков

Допишите класс Segment1, чтобы можно было найти наименьший отрезок из данных.

Даны отрезки по 1 отрезку на строку. Напечатать самый короткий отрезок. Если несколько отрезков такой длины, то взять из них самый левый.

Обед-1 - сумма

Студент покупает обед в столовой. На вход дано что купил студент в формате: название rrr.kk rub По 1 товару на строку. Напечатать список товаров и сколько они стоят, отсортировать от дорогих к дешевым. Напечатать сколько стоит весь обед в формате rrr.kk

Для этого реализовать класс Rub и функции:

class Rub(object):
    """ Класс для работы с рублями и копейками."""
    def __init__(self, rub=0, kop=0):
        self.rub = rub
        self.kop = kop
        self.normalize()

    def __str__(self):
        # тут нужно написать код

    def __lt__(self, other):
        # тут нужно написать код

    def __add__(self, other):
        res = Rub()
        # тут нужно написать код
        return res

class Goods(object):
    """ Класс описания товара: название и цена"""
    def __init__(self, name='', rub=0, kop=0):
        self.name = name
        self.price = Rub(rub, kop)

Пример:

Input:
rice 10.50
tea 6.30
cake 10.12
salad 20.00
Output:
salad 20.00 rub
rice 10.50 rub
cake 10.12 rub
tea 6.30 rub
-----
total 46.92 rub

Обед-2 - сдача

В последней задаче после печати total нужно спросить сколько дал денег покупатель:

t = input('tender:')

Потом напечатать сколько надо дать сдачи (change)

Пример:

# Input:
rice 10.50
tea 6.30
cake 10.12
salad 20.00
#Output:
salad 20.00 rub
rice 10.50 rub
cake 10.12 rub
tea 6.30 rub
-----
total 46.92 rub
# Input:
tender 100
# Output:
tender 100.00 rub
change 53.08 rub

Обед-3 - цена за 1 кг и вес

Некоторые товары могут быть заданы как цена за 1 кг и вес в кг.

Их нужно напечатать в чеке в следующем формате:

# Input
rice 43.00 0.5
apple 63 0.127
# Output
rice 43.00x0.5 = 21.50
apple 63.00x0.127 = 8.00

При округлении части копеек лишнее - отбросить.

63.00x0.127 = 8.001, но мы округлили (отбросили лишнее) до 8.00

1.239 округляем до 1.23

results matching ""

    No results matching ""