如何在 python 中表示分数

How to represent fractions in python

我正在尝试实现一种方法,该方法从我定义的矩阵 class 和 returns 使用高斯消元的三角矩阵中获取矩阵。 考虑以下矩阵:

m1 = [[2, -3, -4],
      [-1, 4, 5],
      [1, -3, -4]]

基本上我需要在每一行中添加前一行的倍数,直到我得到一个主对角线下方所有位置都为 0 的矩阵。按照这个过程,我应该有以下矩阵:

m2 = [[2, -3, -4],
      [0, 5/2, 3],
      [0, 0, -1/5]]

问题是像 1/3 这样的分数经常会出现,我不想因为使用浮点数而失去精度。那么有没有办法表示分数呢?我必须为那些定义特殊行为吗? 为了自己做,我不想使用任何外部模块。

有一个 class 可以满足您的需求:fractions.Fraction:

>>> from fractions import Fraction
>>> print(Fraction(5, 6))
5/6

分数在大多数情况下表现得像普通数字:

>>> print(Fraction(5, 6) + 6)
41/6
>>> print(Fraction(5, 6) + Fraction(1, 2))
4/3
>>> print(Fraction(5, 6) + 17.445)
18.278333333333332

最后一个示例表明,如果另一个操作数是 float,则分数将转换为 float。这是有道理的,因为您不会期望将精度不确定的浮点数转换为 Fraction.