存储音符名称的最佳python数据类型是什么?

存储音符名称的最佳python数据类型是什么?,python,Python,存储注释名称的最佳python数据类型是什么 我希望它是可编辑的,但有些音符有其他名称。例如,C#(C sharp)与Db(D flat)是同一个音符。如果我使用一个列表或元组,那么输入替代名称将“中断”迭代过程,我将无法找到一个音符,比如说,通过简单地查找从初始音符向上3步的位置,在其上方找到3个半音。(我已经计算出%12,使其以“循环”方式运行) 理想情况下,我希望两个备选注释名称在“列表”(或最好的日期类型)中占据相同的位置,并能够指定我希望通过调用该名称的方式返回的名称。比如notes.

存储注释名称的最佳python数据类型是什么

我希望它是可编辑的,但有些音符有其他名称。例如,C#(C sharp)与Db(D flat)是同一个音符。如果我使用一个列表或元组,那么输入替代名称将“中断”迭代过程,我将无法找到一个音符,比如说,通过简单地查找从初始音符向上3步的位置,在其上方找到3个半音。(我已经计算出%12,使其以“循环”方式运行)

理想情况下,我希望两个备选注释名称在“列表”(或最好的日期类型)中占据相同的位置,并能够指定我希望通过调用该名称的方式返回的名称。比如notes.flats之类的东西


是否真的有一种数据类型支持这样的东西,或者我看起来完全错了?我的下一个想法是制作一个类。

列表怎么样:

notes = [['F','F#','G','G#','A','A#','B','C','C#','D','D#','E'],['F','F#','G','G#','A','A#','B','C','C#','D','D#','E']]

print(notes[0][1], notes[1][1])
两者都将返回适合您的F#

声音

您可以将字典的每个元素与允许您访问它的键相关联

看起来是这样的:

{ "C#":"Db", ... }
for key in dictionary:
    print key                # will access the element to the left of :
    print dictionary[key]    # will access the element to the right of :
您可以像这样迭代字典:

{ "C#":"Db", ... }
for key in dictionary:
    print key                # will access the element to the left of :
    print dictionary[key]    # will access the element to the right of :

希望有帮助

将内部表示(代码使用的内容)与外部表示(用户看到的内容)分开。注意:名字对人来说是很好的,但对一个程序来说就不那么好了

内部表示:一个八度音阶中有十二个音符,因此将音符存储为数字0到11

现在需要函数在内部和外部表示之间进行转换。一个用于将注释名称转换为注释编号,另一个用于将注释名称转换为注释编号

def parse_note_name(note_name):
    ...
    return note_number

def to_note_name(note_number, symbol='#'):
    ...
    return note_name
这可能是这两种方法的特征。第一个解析注释名,如C♯ 或D♭ 并返回一个介于0和11之间的数字。第二个将数字0-11转换为注释名称。由于注释有多个非简谐名称,因此可以使用类似
symbol
的参数来控制是否返回尖锐或扁平


您可以通过列出所有21种注释名称(七种自然、七种尖锐、七种扁平)来实现名称解析。一个更聪明的实现将首先处理字母,然后处理符号:将字母转换为音符编号,然后如果有♯ 加1;如果有♭ 减法1。

我认为,在一个列表中有相同音符的dict最好。@jan甚至可能是一个有序的dict,因为它听起来像键的顺序在这里可能很重要是的,顺序对这很重要如果我做对了,这就是collections。还是deredrect right?仔细研究一下。你可能会发现一个有用的方法——它们支持成员的别名。我喜欢这种方法的简单性。我想第二份清单应该包括公寓。是的,第二份清单可以有其他名称。如果你想代表一架钢琴,也可以在音阶上用同样的名字。让人大开眼界。这对我所做的是完美的!