如何循环繁琐的 if 语句



我目前正在尝试制作一个程序,将乐谱用于小提琴并将给定的音符转换为弦上的位置,但我的问题是,当我问一个键是尖锐的还是平坦的,以及该键签名中有多少尖音或平音时,我发现我正在做一堆乏味的 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等,并将它们转换为小提琴指板上的确切位置,因此您不必手动搜索音符。该程序适用于缺乏阅读乐谱经验的小提琴初学者。

您可以使用字典:

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

这使用 (keysig, signum) 元组作为键,映射到特定的音符转置。如果未找到此类签名,则不会进行任何更新(使用空字典进行更新)。

相关内容

  • 没有找到相关文章

最新更新