Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Python - Tentativa de projeto

Olá, pessoal!

Durante meus estudos sobre a linguagem Python e classes, tentei desenvolver o seguinte projeto.

class Eq2Grau:

    def __init__(self, a, b, c):
        print("Construindo objeto ... {}".format(self))
        self.__a = a
        self.__b = b
        self.__c = c

    def discriminante(self):
        d = (self.__b ** 2) - (4 * self.__a * self.__c)
        print("O discriminante da equação é {}".format(d))
        if (d < 0):
            print("Não existe raiz real")
        elif (d == 0):
            print("Existe apenas uma raiz real")
        else:
            print("Existe duas raízes reais")

    def raizes(self):
        d = (self.__b ** 2) - (4 * self.__a * self.__c)
        xa = round((((-1) * self.__b) + (d ** 0.5)) / (2 * self.__a), 2)
        xb = round((((-1) * self.__b) - (d ** 0.5)) / (2 * self.__a), 2)
        if (d < 0):
            print("Não existe raiz real")
        elif (d == 0):
            print("As raízes são ambas iguais a {}".format(xa))
        else:
            print("As raízes são {} e {}".format(xa, xb))

    def vertice(self):
        d = (self.__b ** 2) - (4 * self.__a * self.__c)
        xv = round(((-1)*self.__b)/(2 * self.__a),2)
        yv = round(((-1)*d)/(4*self.__a),2)
        print("O vértice da parábola é o ponto ({}, {})".format(xv,yv))

Ele faz a análise de uma equação de segundo grau dados os parâmetros "a", "b" e "c", vulgo os coeficientes que acompanham o x ao quadrado, x e o termo independente respectivamente.

Alguma sugestão para melhora?

2 respostas
solução!

Olá, Adriano!

Seu código já está muito bom, mas sempre há espaço para melhorias, certo? Aqui estão algumas sugestões:

  1. Encapsulamento do cálculo do discriminante: Notei que você calcula o discriminante em vários métodos diferentes. Uma sugestão seria criar um método privado para calcular o discriminante e chamá-lo quando necessário. Isso torna o código mais limpo e evita a repetição de código.
def __discriminante(self):
    return (self.__b ** 2) - (4 * self.__a * self.__c)
  1. Tratamento de exceções: Seu código atual não verifica se "a" é zero. Se for, isso causará um erro de divisão por zero. Portanto, é uma boa prática adicionar alguma verificação ou tratamento de exceção para isso.
if self.__a == 0:
    raise ValueError("O coeficiente 'a' não pode ser zero.")
  1. Retornando valores em vez de imprimindo: Em vez de imprimir os resultados diretamente, você pode optar por retorná-los. Isso torna seu código mais reutilizável, pois outros programas podem usar seus métodos e obter os resultados diretamente.
def raizes(self):
    d = self.__discriminante()
    if d < 0:
        return None
    elif d == 0:
        return -self.__b / (2 * self.__a)
    else:
        raiz_d = d ** 0.5
        return ((-self.__b + raiz_d) / (2 * self.__a), (-self.__b - raiz_d) / (2 * self.__a))

Espero ter ajudado e bons estudos!

Muito obrigado pelo comentário, foi de grande ajuda!