Learn Interfaces by Building an Equation Solver - Step 25

Tell us what’s happening:

im stuck im confused, what does it mean then declare a variable x and assign it the solution.

Your code so far

from abc import ABC, abstractmethod

class Equation(ABC):
    degree: int
  
    def __init__(self, *args):
        if (self.degree + 1) != len(args):
            raise TypeError(
                f"'Equation' object takes {self.degree + 1} positional arguments but {len(args)} were given"
            )
        if any(not isinstance(arg, (int, float)) for arg in args):
            raise TypeError("Coefficients must be of type 'int' or 'float'")
        if args[0] == 0:
            raise ValueError("Highest degree coefficient must be different from zero")
        self.coefficients = {(len(args) - n - 1): arg for n, arg in enumerate(args)}

    def __init_subclass__(cls):
        if not hasattr(cls, "degree"):
            raise AttributeError(
                f"Cannot create '{cls.__name__}' class: missing required attribute 'degree'"
            )

    def __str__(self):
        terms = []
        for n, coefficient in self.coefficients.items():
            if not coefficient:
                continue
            if n == 0:
                terms.append(f'{coefficient:+}')
            elif n == 1:
                terms.append(f'{coefficient:+}x')                
        equation_string = ' '.join(terms) + ' = 0'
        return equation_string.strip('+').strip('+')        
    
    @abstractmethod
    def solve(self):
        pass
        
    @abstractmethod
    def analyze(self):
        pass
        
class LinearEquation(Equation):
    degree = 1

# User Editable Region

    def solve(self):
        self.coefficients= x
        self.coefficients.values(a,b) 
        return solve()

# User Editable Region

    
    def analyze(self):
        pass
    
lin_eq = LinearEquation(2, 3)
print(lin_eq)

Your browser information:

User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36

Challenge Information:

Learn Interfaces by Building an Equation Solver - Step 25

also why doesn’t it keep it to the style of my code? why does it change it to what it wants, it just makes it more confusing for me cuz i don’t understand the len(args) - n - 1): arg for n, arg in enumerate(args)}

now i have got

self.coefficients.values(a,b)
        x = -b/a 
  • If you want to unpack the coefficients stored in the coefficients attribute into the variables a and b, do not put a and b within parentheses of the ‘.values()’ but assign the whole line (without a and b) you already have to variables a and b like this:
a, b = ...
  • After the second line, return x.

wait you can do that… it worked ! you have very good explanations

1 Like