3

我目前正在尝试制作一个程序,该程序为小提琴制作乐谱并将给定的音符翻译成弦上的一个位置,但我的问题是,当我询问一个键是尖锐还是平坦,以及有多少尖锐或平坦是在那个关键签名中,我发现我正在制作一堆乏味的 if/then 语句,例如:

if keysig == sharp and signum == 2:
     note['LE'] == 'D4'
     note['SC'] == 'A4'

elif keysig == sharp and signum == 3:
    note['LE'] == 'D5'
    note['SC'] == 'G2'

您会发现返回并进行稍有更改的另一个声明变得非常烦人。我怎样才能解决这个问题?

对于那些不读乐谱的人:基本上我想说的是,这个算法会记录用户输入的 A、G 或 D,并将它们转换成小提琴指板上的确切位置这样您就不必手动搜索笔记。本课程适用于缺乏乐谱阅读经验的小提琴初学者。

4

1 回答 1

11

您可以使用字典:

transpositions = {
    (sharp, 2): {'LE': 'D4', 'SC': 'A4'},
    (sharp, 3): {'LE': 'D5', 'SC': 'G2'},
    # etc.
}

note.update(transpositions.get((keysig, signum), {}))

这使用元组(keysig, signum)作为键,映射到特定的音符移调。如果没有找到这样的签名,则不进行更新(使用空字典进行更新)。

于 2016-03-20T17:28:13.950 回答