Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Центр помощи
  • » Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами [RSS Feed]

#1 Июнь 16, 2017 11:57:08

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2687
Репутация: +  182  -
Профиль   Отправить e-mail  

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

У тебя питон не правильный.

 >>> isinstance(C, B)
True



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Онлайн

#2 Июнь 16, 2017 12:01:46

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

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

Отсюда можно сделать очевидный вывод - isinstance вообще нихрена не значит, это чисто прикладная вещь и судить по ней о механизме устройства интерпретатора не стоит.



Офлайн

#3 Июнь 16, 2017 12:06:16

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2687
Репутация: +  182  -
Профиль   Отправить e-mail  

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

> Отсюда можно сделать очевидный вывод

Если у тебя третий питон, то в нём будет другое объявление метакласса.

 >>> class B(type): pass
...    
>>> class A(metaclass=B): pass
...
>>> isinstance(A, B)
True



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Онлайн

#4 Июнь 16, 2017 12:27:29

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9731
Репутация: +  843  -
Профиль   Отправить e-mail  

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

Rodegast
См. мои сообщения выше относительно инкапсуляции и перегрузке операторов.
Перегрузка есть не во всех языках. Инкапсуляцию ты не понимаешь, где-то пробелы.
Если бы ты прочитал первое сообщение топика, то ты бы увидел, что их учат не на питоне. А ты заострился на питоне, потому что он якобы здесь спрашивает решение. Шире надо смотреть. Получается, если тебе C дать, ты ни одной фичи написать не сможешь на нём, там же нет ничего. Если у него вуз, то его запросто могут кинуть на другой язык и сказать “вот сегодня будешь писать на этом”. Я такое видал, это когда в вузах проходят сразу несколько языков. А уж сколько я на Shell'е (Bash) всяких программ написал, которые на нём вообще неудобно писать, это не сосчитать. И матрицы транспонировал, и прочую неудобную хрень делал. Это при том, что в Bash'е нет нихрена для программирования, там даже функция не может вернуть число больше 255.

Rodegast
Иди на OZON и купи каких нибудь умных книжек по Python-у. Как их прочитаешь, так и умничай, а то ты даже основы объектной модели не знаешь.
Ты не понимаешь, что ты синтаксический сахар воспринимаешь как откровение века. Ничем метакласс от класса не отличается, просто его экземпляры - это классы. Что там в питоне понаписано про это разделение - это совсем не важно. Ты хочешь сказать, что метакласс - это не класс? А почему там слово класс тогда участвует? Вот ты даже об этом не думаешь.

Rodegast
Ты разницу между предком и экземпляром понимаешь или как?
И что ты понял про isinstance() ? Что они экземплярами друг друга являются?



Отредактировано py.user.next (Июнь 16, 2017 12:28:35)

Офлайн

#5 Июнь 16, 2017 12:32:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

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

Да плевать, вопрос вообще не про это. Если каждый класс в питоне является инстансом метакласса, то инстансом чего является класс type? А если у type есть метакласс, то инстансом чего он является? И так далее. Понятно, что когда-то мы докопаемся до сущности, у которой нет метакласса. Эта сущность создает все остальные классы. Авторы питона не стали заморачиваться и постановили, что формально такой сущностью является класс type, который есть инстанс сам себя. isinstance(type, type) == True Разумеется класс не может быть инстансом самого себя, это просто такое допущение от авторов, чтобы не пускать пользователей на уровень ниже классов. Если мы рассуждаем о том, как принято выражаться в питоне, то пусть будет по-твоему, пусть классы будут инстансами метакласса, мне все равно. Это вопрос терминологии, и он не влияет на устройство Вселенной. Если мы говорим о том, как это на самом деле работает, то от фабрики классов, которая сама не является классом мы никуда не денемся, просто из соображений логики. Таким образом все классы создаются одной функцией. И далеко за такой функцией ходить не надо, это функция type, которая исторически называется так же как тип type, и она же работает в метаклассах.



Офлайн

#6 Июнь 16, 2017 12:39:07

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9731
Репутация: +  843  -
Профиль   Отправить e-mail  

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

FishHook
Если каждый класс в питоне является инстансом метакласса, то инстансом чего является класс type?
object выше, чем type, в иерархии классов. Это доказано выше через функцию issubclass(). type - класс, производный от класса object. А класс object создан без всякого метакласса.



Отредактировано py.user.next (Июнь 16, 2017 12:39:33)

Офлайн

#7 Июнь 16, 2017 14:35:34

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2687
Репутация: +  182  -
Профиль   Отправить e-mail  

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

> Если бы ты прочитал первое сообщение топика, то ты бы увидел, что их учат не на питоне…

Но он то делает задание не на cpp, а на Python-е.

> Ты не понимаешь, что ты синтаксический сахар воспринимаешь как откровение века.

Реализацию метакласса без использования type или types.ClassType в студию!

> от фабрики классов, которая сама не является классом мы никуда не денемся, просто из соображений логики.

Ну так мы слишком далеко зайдём и начнём размышлять над устройством интерпретатора.

> object выше, чем type, в иерархии классов

 >>> object.__class__
<type 'type'>
>>> object.__class__ is type
True



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июнь 16, 2017 14:36:18)

Онлайн

#8 Июнь 16, 2017 20:01:10

AsphaltHero
Зарегистрирован: 2017-06-04
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Вот, дорогие форумчане код. Задание я сдал на 5. Спасибо всем, кто помог. Хотя в большинстве вы спорите о своем)

 import math
class Complex: #Класс комплексных чисел
    def __init__(self, real, imag):
        self.real = real
        self.imag = imag
    def __str__(self): # Строковое представление объекта числа
        sign = '+' if self.imag >= 0 else ''
        if self.imag == 0:
            return '{}'.format(self.real)
        else:
            return '{}{}{}i'.format(self.real, sign, self.imag)
    def __repr__(self): # Представление в сыром виде объекта числа
        sign = '+' if self.imag >= 0 else ''
        if self.imag == 0:
            return '{}'.format(self.real)
        elif self.real == 0.0:
            return '{}i'.format(self.imag)
        else:
            return '{:.3f}{}{:.3f}i'.format(self.real, sign, self.imag)
class ComplexCalc:
    def add(self, c1, c2):  # сложение
        real = c1.real + c2.real
        imag = c1.imag + c2.imag
        return Complex(real, imag)
    def sub(self, c1, c2):  # вычитание
        real = c1.real - c2.real
        imag = c1.imag - c2.imag
        return Complex(real, imag)
    def mul(self, c1, c2):  # умножение
        real = c1.real * c2.real - c1.imag * c2.imag
        imag = c1.imag * c2.real + c1.real * c2.imag
        return Complex(real, imag)
    def truediv(self, c1, c2):  # деление
        real = (c1.real * c2.real + c1.imag * c2.imag) / ((c2.real ** 2) + (c2.imag ** 2))
        imag = (c1.real * c2.real - c1.imag * c2.imag) / ((c2.real ** 2) + (c2.imag ** 2))
        return Complex(real, imag)
    def abs(self, c):
        return (c.real ** 2 + c.imag ** 2) ** 0.5
    def pow(self, c, n): # степень
        if n < 1 or int(n) != n:
            raise ValueError('power should be natural (integer from 1 to +inf): ' + str(n))
        phi = math.atan2(c.imag, c.real)
        r = (c.real ** 2 + c.imag ** 2) ** 0.5
        rpn = r ** n
        nphi = n * phi
        real = rpn * math.cos(nphi)
        imag = rpn * math.sin(nphi)
        return Complex(real, imag)
A = []
C = []
calc = ComplexCalc()
# Задание 1
for i in range(1, 4): # заполение массива
    num = Complex(i, i)
    A.append(num)
print('Массив А:', A)
for i in range(len(A)): # вычисление массива С
    if i == 0:
        C.append(calc.abs(A[i + 1]))
    elif i == (len(A) - 1):
        C.append(calc.abs(A[i - 1]))
    else:
        C.append(calc.add(calc.abs(A[i - 1]), calc.abs(A[i + 1])))
print('Массив C:', C)
#Задание 2
b = []
for i in range(len(A)):
    b.append([])
    for j in range(len(A)):
        if i == 0:
            b[i].append(A[j])
        else:
            b[i].append(calc.pow(A[j], i))
print('Массив B:', b)

Офлайн

  • Начало
  • » Центр помощи
  • » Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version