Рациональная дробь

Статус
Закрыто для дальнейших ответов.

Gruslan

Новичок
Пользователь
Ноя 6, 2020
7
0
1
  1. Определить класс "Рациональная дробь" в виде пары чисел m и n
  • у класса должна быть возможность читаемого преобразования в строку (магический метод __str__)
  • возможность складывать и вычитать дроби с помощью операторов + и -
  • возможность получить дробь в виде десятичного числа
  • сделать так, что после создания объекта дроби менять m и n нельзя, только читать
  1. Определить класс "Набор дробей". Должна быть возможность добавлять дробь в набор через метод принимающий объект "Рациональная дробь", и набор должен уметь выдавать следующую статистику:
  • максимальную дробь в наборе
  • минимальную дробь в наборе
  • количество дробей в наборе больше заданной
  • количество дробей в наборе меньше заданной
  1. Определить класс "Полином" с коэффициентами в виде дроби. Полином должен иметь возможность задаваться через Набор дробей. Реализовать вычисление суммы полиномов. А также читаемый вывод через приведение к строке (__str__)
  2. Написать код демонстрирующий функционал всех трех классов.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 669
477
83
Удачи в выполнении задания
 

Dmitriyk

Новичок
Пользователь
Ноя 7, 2020
8
3
3
А где сам код? В чем проблема?
 

Gruslan

Новичок
Пользователь
Ноя 6, 2020
7
0
1
Мне нужно сделать код
 

Gruslan

Новичок
Пользователь
Ноя 6, 2020
7
0
1
Помоги пж
 

Dmitriyk

Новичок
Пользователь
Ноя 7, 2020
8
3
3
Мне нужно сделать код
Делай, условия есть, думаю проблем не будет.
 

Gruslan

Новичок
Пользователь
Ноя 6, 2020
7
0
1
Я просто не все понимаю
 

Gruslan

Новичок
Пользователь
Ноя 6, 2020
7
0
1
Помоги с самым первым пунктом
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 669
477
83
На троечку?
 

Gruslan

Новичок
Пользователь
Ноя 6, 2020
7
0
1
Как угодно
 

<'o'>

Новичок
Пользователь
Ноя 3, 2020
8
0
1
Первый пункт:
Код:
from copy import copy

def gcd(a, b): # Нод
    while a > 0:
        b %= a
        if b < a:
            a, b = b, a
    return b

class fraction:
    def __init__(self, m, n):
        self.m = m
        self.n = n
    def cut(self): #Сокращение дроби
        d = gcd(self.m, self.n)
        self.m //= d
        self.n //= d
        if self.n < 0:
            self.m *= -1
            self.n *= -1
    def __str__(self):
        return str(self.m) + '/' + str(self.n)
    def __add__(self, y): #Определение оператора +
        ans = copy(self)
        ans.m, ans.n = ans.m * y.n, ans.n * y.n
        ans.m += y.m * self.n
        return ans
    def __sub__(self, y): #Определение оператора -
        y.m *= -1
        ans = self.__add__(y)
        y.m *= -1
        return ans
    def dec(self):
        return self.m / self.n
Я добавил метод cut, вдруг вам надо сокращать дробь. Как сделать запрет на изменение не знаю.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 669
477
83
Первый пункт:
Код:
from copy import copy

def gcd(a, b): # Нод
    while a > 0:
        b %= a
        if b < a:
            a, b = b, a
    return b

class fraction:
    def __init__(self, m, n):
        self.m = m
        self.n = n
    def cut(self): #Сокращение дроби
        d = gcd(self.m, self.n)
        self.m //= d
        self.n //= d
        if self.n < 0:
            self.m *= -1
            self.n *= -1
    def __str__(self):
        return str(self.m) + '/' + str(self.n)
    def __add__(self, y): #Определение оператора +
        ans = copy(self)
        ans.m, ans.n = ans.m * y.n, ans.n * y.n
        ans.m += y.m * self.n
        return ans
    def __sub__(self, y): #Определение оператора -
        y.m *= -1
        ans = self.__add__(y)
        y.m *= -1
        return ans
    def dec(self):
        return self.m / self.n
Я добавил метод cut, вдруг вам надо сокращать дробь. Как сделать запрет на изменение не знаю.
да вы меценат
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 669
477
83
Первый пункт:
Код:
from copy import copy

def gcd(a, b): # Нод
    while a > 0:
        b %= a
        if b < a:
            a, b = b, a
    return b

class fraction:
    def __init__(self, m, n):
        self.m = m
        self.n = n
    def cut(self): #Сокращение дроби
        d = gcd(self.m, self.n)
        self.m //= d
        self.n //= d
        if self.n < 0:
            self.m *= -1
            self.n *= -1
    def __str__(self):
        return str(self.m) + '/' + str(self.n)
    def __add__(self, y): #Определение оператора +
        ans = copy(self)
        ans.m, ans.n = ans.m * y.n, ans.n * y.n
        ans.m += y.m * self.n
        return ans
    def __sub__(self, y): #Определение оператора -
        y.m *= -1
        ans = self.__add__(y)
        y.m *= -1
        return ans
    def dec(self):
        return self.m / self.n
Я добавил метод cut, вдруг вам надо сокращать дробь. Как сделать запрет на изменение не знаю.
у него еще тема есть можете и там за него код написать тык
 

<'o'>

Новичок
Пользователь
Ноя 3, 2020
8
0
1
Набор дробей:
Код:
class fraction_list:
    def __init__(self):
        self.list = []
    def sort(self):
        for i in range(len(self.list)):
            for j in range(len(self.list) - 1):
                if self.list[j].m * self.list[j + 1].n > self.list[j].n * self.list[j + 1].m:
                    sel.list[j], self.list[j + 1] = self.list[j + 1], self.list[j]
                    
    def add_fract(self, fract):
        self.list.append(fract)
        self.sort()
    def min_fract(self):
        return self.list[0]
    def max_fract(self):
        return self.list[-1]
    def bigger(self, fract):
        l = -1
        r = len(self.list)
        while l + 1 < r:
            m = (l + r) // 2
            if fract.m * self.list[m].n >= fract.n * self.list[m].m:
                l = m
            else:
                r = m
        return len(self.list) - r
    def smaller(self, fract):
        l = -1
        r = len(self.list)
        while l + 1 < r:
            m = (l + r) // 2
            if fract.m * self.list[m].n <= fract.n * self.list[m].m:
                r = m
            else:
                l = m
        return r
 

<'o'>

Новичок
Пользователь
Ноя 3, 2020
8
0
1
Просто делать нечего)
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 669
477
83
Просто делать нечего)
он спросил какое то задание, задание предполагает, что он его должен сделать сам, вы пишите за него в данный момент он сдаст эти тесты на след сессии он еще раз спросит вы еще раз за него все напишите, потом он защититься и вы тоже напишите за него диплом, потом он устроится на работу и что он там будет писать как вы думаете?
 

<'o'>

Новичок
Пользователь
Ноя 3, 2020
8
0
1
он спросил какое то задание, задание предполагает, что он его должен сделать сам, вы пишите за него в данный момент он сдаст эти тесты на след сессии он еще раз спросит вы еще раз за него все напишите, потом он защититься и вы тоже напишите за него диплом, потом он устроится на работу и что он там будет писать как вы думаете?
Говнокод я думаю. Но мне все же кажется, что он остановиться ещё на сессии, когда мой код не заработает.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 669
477
83
Говнокод я думаю. Но мне все же кажется, что он остановиться ещё на сессии, когда мой код не заработает.
вон оно как, ну ок
 
Статус
Закрыто для дальнейших ответов.

Форум IT Специалистов