source: pyromaths/trunk/fuentes/src/pyromaths/classes/Terme.py @ 423

Last change on this file since 423 was 423, checked in by mabarracus, 4 years ago

add sources from pyromaths 15.10

File size: 2.7 KB
Line 
1# -*- coding: utf-8 -*-
2
3class Terme:
4    def __init__(self, coeff, puiss=1, var='x'):
5        if (not (isinstance(puiss, int))) or (not (isinstance(var, str))):
6            print "Erreur de définition ! La puissance doit être un nombre relatif !"
7        self.puiss = puiss  # Nombre entier
8        self.coeff = coeff  # Coeff devant le terme
9        self.var = var  # Lettre pour la var
10
11    def __add__(self, other):
12        if not (isinstance(other, Terme)):
13            return str(self) + " + " + str(other)
14        if (self.puiss == other.puiss) and (self.var == other.var):
15            return Terme(self.coeff + other.coeff, self.puiss, self.var)
16        else:
17            return str(self) + " + " + str(other)
18
19    def __radd__(self, other):
20        return self +other
21
22    def __sub__(self, other):
23        if not (isinstance(other, Terme)):
24            return str(self) + " + " + str(other)
25        if (self.puiss == other.puiss) and (self.var == other.var):
26            return Terme(self.coeff - other.coeff, self.puiss, self.var)
27        else:
28            return str(self) + " - " + str(other)
29
30    def __rsub__(self, other):
31        return -(self -other)
32
33    def __mul__(self, other):
34        if (isinstance(other, float)) or (isinstance(other, int)):
35            return Terme(self.coeff * other, self.puiss, self.var)
36        elif self.var == other.var:
37            return Terme(self.coeff * other.coeff, self.puiss + other.puiss, self.var)
38        else:
39            return Terme(self.coeff * other.coeff, self.puiss + other.puiss, self.var + other.var)
40
41    def __rmul__(self, other):
42        return self * other
43
44    def __div__(self, other):
45        if (isinstance(other, float)) or (isinstance(other, int)):
46            return Terme(self.coeff / other, self.puiss, self.var)
47        elif self.var == other.var:
48            return Terme(self.coeff / other.coeff, self.puiss - other.puiss, self.var)
49        else:
50            return str(self.coeff / other.coeff) + str(Terme(1, self.puiss, self.var)) + " / " + str(Terme(1, other.puiss, other.var))
51
52    def __rdiv__(self, other):
53        return self.inv() * other
54
55    def inv(self):
56        return Terme(1.0 / self.coeff, -self.puiss, self.var)
57
58    def __str__(self):
59        if self.coeff == 1:
60            coeff = ''
61        elif self.coeff == -1:
62            coeff = '-'
63        else:
64            coeff = str(self.coeff) + ' '
65        if self.puiss == 1:
66            terme = self.var
67        elif (self.puiss == 0) and ((self.coeff == 1) or (self.coeff == -1)):
68            terme = '1'
69        elif self.puiss == 0:
70            terme = ''
71        else:
72            terme = self.var + u'^' + str(self.puiss)
73        return coeff + terme
74               
Note: See TracBrowser for help on using the repository browser.