Раздел «Язык Си».PythonOOPTasks:

Перегрузка операторов

Написать класс для работы с простыми дробями.

Дробь вида 2/3 задается как Drob(2, 3).

Обратите внимание: результат сложения 1/2 + 1/6 = 3/6 + 1/6 = 4/6 = 2/3. Дроби нужно упрощать.

Статические методы

Написать класс Student, который читает данные студентов по формату

Мьянма: имя, физика, математика, русский Остальные: имя, оценки через запятую

Мьянма, пример:

4
Alex, 10, 8, 7
Liza, 5, 0, 0
Taty, 7, 0, 3
Mike, 3, 10, 5

Остальные, пример:

4
Alex, 10, 8, 7
Liza, 5
Taty, 7, 3
Mike, 3, 10, 5, 6, 8

Две задачи. В первой задаче нужно у каждого студента напечатать характеристику.

Мьянма

Вариант Характеристика Отсортировать
1 среднее арифметическое по убыванию
2 минимальная оценка по возрастанию
3 максимальная оценка по убыванию
4 сколько 0 ("хвостов") по убыванию
5 сколько сдано зачетов по возрастанию

Остальные

Вариант Характеристика Отсортировать
6 среднее арифметическое по возрастанию
7 самая большая оценка по убыванию
8 сколько сдано зачетов по возрастанию

class Drob:
    def __init__(self, a, b):
        self.a = a
        self.b = b
        self.normalize()
        
    def normalize(self):
        k = Drob.nod(self.a, self.b)
        self.a = self.a // k
        self.b = self.b // k
        
    def __repr__(self):
        return f'{self.a} / {self.b}'
        
    def __add__(self, other):
        a1 = self.a
        b1 = self.b
        a2 = other.a
        b2 = other.b
        return Drob(a1*b2 + a2*b1, b1*b2)
        
    def __lt__(self, other):
        a1 = self.a
        b1 = self.b
        a2 = other.a
        b2 = other.b
        if a1 * b2 < a2 * b1:
            return True
        else:
            return False
            
        # return a1 * b2 < a2 * b1

    @staticmethod
    def nod(a, b):
        while True:
            res = a % b
            if res == 0:
                return b
            # a, b = b, res
            a = b
            b = res
            
    @staticmethod
    def readDrob(s):
        # делает дробь из строки вида '3/4'
        # возвращает дробь
        print(s, type(s))
        a, b = map(int, s.split('/'))
        return Drob(a, b)
    
def test():
    d1 = Drob(1, 2)
    print(d1)
    d2 = Drob(3, 4)
    print(d2)
    
    d = d1 + d2     # d = d1.__add__(d2)    ==>   d = Drob.__add__(d1, d2)
    print(f'{d} = {d1} + {d2}')
    
    if d1 < d2:
        print(f'{d1} less then {d2}')
    
    a = [Drob(1, 2), Drob(3, 4), Drob(1, 5), Drob(2, 5)]
    print(a)
    
    dmin = min(a)
    print(f'minimum: {dmin}')
    
    b = sorted(a)
    print(b)


def test2():
    words = input().split()
    a = []
    for w in words:
        d = Drob.readDrob(w)
        a.append(d)
        
    print(a)
    print(sorted(a))
        
test2()

-- TatyanaDerbysheva - 07 May 2019