OP,
Le probleme que tu as est un probleme de typage. Les nombres en python sont generalement represente sous forme de nombre a virgule flotante IEEE 754. ( https://en.wikipedia.org/wiki/IEEE_754 ) Dans ce format, les nombres sont representes en notation scientifique avec une dizaine de chiffres apres la virgule.
C'est pour ca que sqrt(2) devient 1.41.... ou que 1/3 devient 0.333...
Si tu as besoin de conserver la valeure exacte, il faut utiliser une autre representation. Azerban fournit un type qui va fonctionner avec des fractions. Mais ca n'aidera pas pour sqrt(2) par exemple. il y a des lib qui fournissent des types pour representer les nombres symboliquement. SymPy par exemple.
La vraie question est "pourquoi est ce que c'est important de garder une representation symbolique?"
Je ne connais que ters peu d'application ou c'est utile.