Solve a proportion with Python – Teach math with Python – part 1

A little class to solve proportions:

# python_math 1
# proportions

class Prop:
    def __init__(self, prop):
        '''This is how you put the argument e1 : e2 = m1 : m2 
        ie: 12 : 3 = 36:9
        '''
        self.proportion = prop
        prop = prop.replace("=", ":")
        self.prop = e1, m1, m2, e2 = prop.split(":")
        for n, x in enumerate(self.prop):
            if x.strip() == "x":
                self.prop[n] = None
            else:
                self.prop[n] = int(x)
        e1, m1, m2, e2 = self.prop
        self.e1 = e1
        self.e2 = e2
        self.m1 = m1
        self.m2 = m2

    def calculate_x(self):
        "Call this from the istance to find the incognito"
        print(f"The result of '{self.proportion}' is ", end="")
        if self.e1 is None:
            res = self.m1 * self.m2 / self.e2
            return res
        elif self.e2 is None:
            res = self.m1 * self.m2 / self.e1
            return res
        elif self.m1 is None:
            res = self.e1 * self.e2 / self.m2
            return res 
        elif self.m2 is None:
            res = self.e1 * self.e2 / self.m1
            return res
        print(res)



p1 = Prop("12 : 3 = 36 : x")
print(p1.calculate_x())

The result

The result of '12 : 3 = 36 : x' is 9.0
>>>

Fully commented code

If you want to see what the code does without having to guess by the code, see this fully commented code version of the one above:

# python_math 1
# proportions

class Prop:
    def __init__(self, prop):
        '''This is how you put the argument e1 : e2 = m1 : m2 
        ie: 12 : 3 = 36:9
        '''
        self.proportion = prop
        # replace = with :
        prop = prop.replace("=", ":")
        # create a list with the numbers, splitting by the ':'
        self.prop = prop.split(":")
        # converts strings into integers and x to None
        for n, x in enumerate(self.prop):
            if x.strip() == "x":
                self.prop[n] = None
            else:
                self.prop[n] = int(x)
        # memorize in memorable names the extrem and medium terms
        e1, m1, m2, e2 = self.prop
        self.e1 = e1
        self.e2 = e2
        self.m1 = m1
        self.m2 = m2

    def calculate_x(self):
        "Call this from the istance to find the incognito"
        print(f"The result of '{self.proportion}' is ", end="")
        # Depending on what is None (incognito), it finds it with the other 3
        if self.e1 is None:
            res = self.m1 * self.m2 / self.e2
            return res
        elif self.e2 is None:
            res = self.m1 * self.m2 / self.e1
            return res
        elif self.m1 is None:
            res = self.e1 * self.e2 / self.m2
            return res 
        elif self.m2 is None:
            res = self.e1 * self.e2 / self.m1
            return res
        print(res)


# First you create the istance of Prop with a string containing the proposition
p1 = Prop("12 : 3 = 36 : x")
# Then you get the solution with calculate_x (method of Prop class)
print(p1.calculate_x())

 

Video tutorial about this script

Repository

Github https://github.com/formazione/python_math


Subscribe to the newsletter for updates
Tkinter templates
Avatar My youtube channel

Twitter: @pythonprogrammi - python_pygame

Videos

Speech recognition game

Pygame's Platform Game

Other Pygame's posts

Published by pythonprogramming

Started with basic on the spectrum, loved javascript in the 90ies and python in the 2000, now I am back with python, still making some javascript stuff when needed.