【问题标题】:How to loop over a tedious if statement如何遍历乏味的 if 语句
【发布时间】:2016-07-07 03:10:47
【问题描述】:

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

【问题讨论】:

  • 为了我们这些不读乐谱的人的利益,你能在这里解释一下算法吗?
  • 试用{(sharp, 3): {'LE': 'D5', 'SC': 'G2'}}[keysig, signum]

标签: python if-statement translate music-notation


【解决方案1】:

你可以使用字典:

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

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

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

【讨论】:

  • 优雅的解决方案!我会记住这一点以供进一步使用。 :)
猜你喜欢
  • 1970-01-01
  • 2017-07-24
  • 2011-09-04
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多