Calculer des fractions (nombres rationnels) avec des fractions

Affaires

À l'aide du module fractions de la bibliothèque Python standard, vous pouvez effectuer des calculs avec des fractions (nombres rationnels).

Ce qui suit est expliqué ici.

  • Constructeur de Fraction
  • Obtenir les valeurs du numérateur et du dénominateur sous forme d'entiers
  • Calculer et comparer des fractions (nombres rationnels)
  • Conversion de fractions en décimales (float)
  • Conversion de fractions en chaînes de caractères (str)
  • Obtenir une approximation d'un nombre rationnel

Constructeur de Fraction

Il existe plusieurs façons de créer une instance de Fraction. Dans tous les cas, la fraction est automatiquement divisée en fractions.

Spécifier le numérateur et le dénominateur comme des entiers

Spécifiez le numérateur et le dénominateur comme des entiers, respectivement. Si le dénominateur est omis, il est supposé être égal à 1.

from fractions import Fraction

print(Fraction(1, 3))
# 1/3

print(Fraction(2, 6))
# 1/3

print(Fraction(3))
# 3

fraction décimale (float)

Si une valeur fractionnaire est passée, elle est convertie en fraction.

print(Fraction(0.25))
# 1/4

print(Fraction(0.33))
# 5944751508129055/18014398509481984

Si vous souhaitez faire une approximation en spécifiant un dénominateur maximum, utilisez la méthode limit_denominator() décrite ci-dessous.

chaîne de caractères (str)

Si une valeur de type chaîne est passée, elle est convertie en fraction.

print(Fraction('2/5'))
# 2/5

print(Fraction('16/48'))
# 1/3

Obtenir les valeurs du numérateur et du dénominateur sous forme d'entiers

Les attributs de type Fraction permettent d'obtenir des valeurs entières pour le numérateur et le dénominateur, respectivement. Ils ne peuvent pas être modifiés.

  • numerator
  • denominator
a = Fraction(1, 3)
print(a)
# 1/3

print(a.numerator)
print(type(a.numerator))
# 1
# <class 'int'>

print(a.denominator)
print(type(a.denominator))
# 3
# <class 'int'>

# a.numerator = 7
# AttributeError: can't set attribute

Calculer et comparer des fractions (nombres rationnels)

Les opérateurs arithmétiques permettent de calculer des additions, des soustractions, etc.

result = Fraction(1, 6) ** 2 + Fraction(1, 3) / Fraction(1, 2)
print(result)
print(type(result))
# 25/36
# <class 'fractions.Fraction'>

Les opérateurs de comparaison peuvent également être utilisés.

print(Fraction(7, 13) > Fraction(8, 15))
# True

Conversion de fractions en décimales (float)

Peut convertir des fractions en décimales avec float().

a_f = float(a)
print(a_f)
print(type(a_f))
# 0.3333333333333333
# <class 'float'>

Lorsqu'il est calculé avec un nombre décimal, il est automatiquement converti en type flottant.

b = a + 0.1
print(b)
print(type(b))
# 0.43333333333333335
# <class 'float'>

Conversion de fractions en chaînes de caractères (str)

Pour convertir en chaîne de caractères, utilisez str().

a_s = str(a)
print(a_s)
print(type(a_s))
# 1/3
# <class 'str'>

Obtenir une approximation d'un nombre rationnel

Une approximation en nombre rationnel peut être obtenue avec la méthode limit_denominator() de type Fraction.

Renvoie le nombre rationnel (fraction) dont le dénominateur est inférieur ou égal à l'argument max_dénominateur. S'il est omis, dénominateur_maximum=1000000.

Approximer des nombres irrationnels tels que pi et le nombre de Napier e

pi = Fraction(3.14159265359)
print(pi)
# 3537118876014453/1125899906842624

print(pi.limit_denominator(10))
print(pi.limit_denominator(100))
print(pi.limit_denominator(1000))
# 22/7
# 311/99
# 355/113

e = Fraction(2.71828182846)
print(e)
# 6121026514870223/2251799813685248

print(e.limit_denominator(10))
print(e.limit_denominator(100))
print(e.limit_denominator(1000))
# 19/7
# 193/71
# 1457/536

Convertir des décimales circulaires en fractions

a = Fraction(0.565656565656)
print(a)
# 636872674577009/1125899906842624

print(a.limit_denominator())
# 56/99

a = Fraction(0.3333)
print(a)
# 6004199023210345/18014398509481984

print(a.limit_denominator())
print(a.limit_denominator(100))
# 3333/10000
# 1/3
Copied title and URL