4

我正在使用 Python 开发一个音乐应用程序,并希望使用分数模块来处理时间签名等。我的问题是分数被简化了,即:

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

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

谢谢!

4

3 回答 3

9

是的:为它创建一个自定义类。

音乐拍号不是分数,所以用数学课来表示它们是没有意义的。

于 2010-05-19T06:19:30.340 回答
3

您应该使用分数以外的一些数据结构。一个简单的元组是最简单的,尽管你也可以创建自己的类。如果您需要进行计算,请对构成拍号的各个整数进行计算。

于 2010-05-19T06:19:05.927 回答
0

不,没有 - GCD 的除法内置于 Fraction 类操作中。无论如何,您可能想要创建自定义类的其他原因,至少如果您正在使用乐谱,是:

  • 能够处理 4/4 和 2/4 的普通时间 (C) 和削减时间 (slash-C) 替换——甚至更好,使其成为可选
  • 能够表示复合拍号(例如 2+3+2/8)
于 2010-06-03T06:33:02.563 回答