Python:避免分数简化

时间:2010-05-19 06:15:28

标签: python fractions music-notation

我正在研究Python中的音乐应用程序,并希望使用分数模块来处理时间签名等。我的问题是分数得到简化,即:

>>> from fractions import Fraction
>>> x = Fraction(4, 4)
>>> x
Fraction(1, 1)

然而,从音乐的角度来看,重要的是4/4保持4/4,即使它等于1.是否有任何内置方法可以避免这种行为?

谢谢!

3 个答案:

答案 0 :(得分:9)

是:为它制作一个自定义类。

音乐时间签名不是分数,因此用数学类来表示它们是没有意义的。

答案 1 :(得分:3)

您应该使用除Fraction之外的某些数据结构。只是一个简单的元组是最简单的,虽然你也可以创建自己的类。如果需要进行计算,请对构成时间签名的各个整数进行计算。

答案 2 :(得分:0)

不,没有 - GCD的划分内置于Fraction类操作中。你可能想要创建一个自定义类的其他原因,至少如果你正在使用乐谱,是:

  • 能够处理4/4和2/4的公共时间(C)和削减时间(斜线-C)替换 - 或甚至更好,以实现可选
  • 能够表示复合时间签名(例如2 + 3 + 2/8)