>> from fractions import Fraction >>> x = Fra-6ren">
gpt4 book ai didi

python - 有没有办法得到 "mutable"分数? - Python

转载 作者:行者123 更新时间:2023-11-28 20:41:03 24 4
gpt4 key购买 nike

有没有办法得到一个“可变的”Fraction

我试过了,但 Fraction 中的分子/分母似乎不可变。

>>> from fractions import Fraction
>>> x = Fraction(0,1)
>>> numerators = [1,2,3,4,5]
>>> denominators = [9,8,7,6,5]
>>> for n,d in zip(numerators, denominators):
... x.numerator+= n
... x.denominator+= d
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
AttributeError: can't set attribute

我一直这样做是因为我的分子/分母来自另一个返回分数生成器的函数。

>>> inputs = [Fraction(1,9), Fraction(2,8), Fraction(3,7), Fraction(4,6)]
>>> numerators, denominators = zip(*[(f.numerator, f.denominator) for f in inputs])
>>> x = Fraction(sum(numerators), sum(denominators))
>>> x
Fraction(7, 23)

(请注意,我没有添加 1/9 + 2/8 + 3/7 + 4/6,我试图对分子求和并除以分母之和)

是否存在“可变”分数?

最佳答案

numeratordenominator 是不可变的,原因有二:

  1. 其他 Python 数字类型是不可变的,包括也由两个更简单的数值组成的复数,以及任意宽度的数量,例如 longDecimal。可变分数是个异常(exception)。

  2. 能够单独改变分子和分母将有可能使分数无效,例如通过使其非规范化,或将分母设置为零。

换句话说,没有公共(public) API 可以改变 fractions.Fraction 对象。如果您确实需要单个分子和分母的总和,这听起来不是很有用,那么您的第二个代码片段是一种合理的方法。第一个片段的更精确的再现可能如下所示:

x = Fraction(sum(f.numerator for f in inputs),
# add 1 since we start out with 0/1
1 + sum(f.denominator for f in inputs))

关于python - 有没有办法得到 "mutable"分数? - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34561265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com