如何处理不支持索引的 Python 对象



>目标:有两个稍后可以在脚本中调用的元素

描述:在下面的示例中,我只对 0.25 值感兴趣,该值将由 1/4 表示(。我想为分子 (1( 和分母 (4( 提供一个值。我正在使用Python的分数模块。

NUMBER = 5.25
from fractions import Fraction
import math
def express_partFraction(NUMBER):
    part = math.modf(NUMBER)[0] 
    return ((Fraction(part)))
express_partFraction(NUMBER)

目前,我返回了以下不可索引的内容:

Fraction(1, 4)

但是,我正在寻找类似以下内容的内容:

numerator = express_partFraction(NUMBER)[0]
denominator = express_partFraction(NUMBER)[1]

这将生成此错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-486-39196ec5b50b> in <module>()
     10 express_partFraction(NUMBER)
     11 
---> 12 numerator = express_partFraction(NUMBER)[0]
     13 denominator = express_partFraction(NUMBER)[1]
TypeError: 'Fraction' object does not support indexing

Python 2.7 文档省略了Fraction对象具有numeratordenominator属性的事实。你可以在 Python 3 文档中找到它们。

如果你想查看未知对象具有哪些属性,只需使用 dir() 函数:

>>> x = Fraction(1, 2)
>>> x.numerator
1
>>> x.denominator
2
>>> [a for a in dir(x) if not a.startswith('_')]
['conjugate', 'denominator', 'from_decimal', 'from_float', 'imag', 'limit_denominator', 'numerator', 'real']

分数对象具有numeratordenominator属性:

numerator = some_fraction.numerator
denominator = some_fraction.denominator

但是,您输入浮点数的事实会给您带来问题:

>>> fractions.Fraction(0.1)
Fraction(3602879701896397, 36028797018963968)

limit_denominator,你可以用它来猜测分数"应该"是什么,假设分母不太大,但你真的应该尽量避免浮点步长。例如,将输入作为字符串:

>>> fractions.Fraction('1.1')
Fraction(11, 10)
>>> fractions.Fraction('1.1') % 1
Fraction(1, 10)
>>> _.numerator
1

最新更新