Typy danych - programowanie obiektowe

0

Napisałem taki program

import math

class Funkcja_kwadratowa():
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

    def wyswietl_funkcje(self):
        print(f"Funkcja ma postać: {self.a}x^2+{self.b}x+{self.c}")

    def Rozwiaz(self):
        delta = {self.b}^2-4*{self.a}*{self.c}
        print(delta)
        pierwiastek_delta = sqrt(delta)
        x1 = b-(pierwiastek_delta)/2
        x2 = b+(pierwiastek_delta)/2
        print(f"Miejsca zerowe to: {x1} i {x2}.")

def main():
    funkcja1 = Funkcja_kwadratowa(3,4,5)
    funkcja1.wyswietl_funkcje()
    funkcja1.Rozwiaz()

if __name__ == "__main__":
    main()

Niestety wyskakuje błąd:
Funkcja ma postać: 3x^2+4x+5
Traceback (most recent call last):
File "funkcja_kwadratowa.py", line 26, in <module>
main()
File "funkcja_kwadratowa.py", line 23, in main
funkcja1.Rozwiaz()
File "funkcja_kwadratowa.py", line 13, in Rozwiaz
delta = {self.b}^2-4*{self.a}*{self.c}
TypeError: unsupported operand type(s) for *: 'int' and 'set'

Nie wiem jak mam prowadzić obliczenia? Dając tam self nie idzie.

2

Możesz na przykład nie wciskać na siłę tych nawiasów klamrowych.

1

jeszcze jedna uwaga, self.b^2 zapewne nie robi tego co chcesz.

1

Masz tam w ogóle buga, po uporządkowaniu tego (potęgowanie: **, funkcja repr zamiast tego staroświeckiego drukuj), dla tych danych delta będzie ujemna i Dostaniesz błąd dziedziny funkcji (po wpisaniu jakiegoś dużego b program coś tam liczy). W tej wersji, trzeba dodać sprawdzenie i drukować komunikat o braku rozwiązań rzeczywistych.

from math import sqrt

class Funkcja_kwadratowa():
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

    def __repr__(self):
        return (f"Funkcja ma postać: {self.a}x^2+{self.b}x+{self.c}")

    def Rozwiaz(self):
        delta = (self.b) ** 2 - 4 * self.a * self.c
        print(delta)
        pierwiastek_delta = sqrt(delta)
        x1 = self.b-(pierwiastek_delta)/2
        x2 = self.b+(pierwiastek_delta)/2
        print(f"Miejsca zerowe to: {x1} i {x2}.")

def main():
    funkcja1 = Funkcja_kwadratowa(3,4,5)
    funkcja1.Rozwiaz()
    print(funkcja1)

if __name__ == "__main__":
    main()

1 użytkowników online, w tym zalogowanych: 0, gości: 1