python - 这个 for 循环有什么作用?- 乐谱
问题描述
下面是完整的代码,它从字典中获取书面字符并将其转换为乐谱。我想知道是否有人可以向我解释 for 循环是如何工作的。
char2notes = {
' ':("a4 a4 ", "r2 "),
'a':("<c a>2 ", "<e' a'>2 "),
'b':("e2 ", "e'4 <e' g'> "),
'c':("g2 ", "d'4 e' "),
'd':("e2 ", "e'4 a' "),
'e':("<c g>2 ", "a'4 <a' c'> "),
'f':("a2 ", "<g' a'>4 c'' "),
'g':("a2 ", "<g' a'>4 a' "),
'h':("r4 g ", " r4 g' "),
'i':("<c e>2 ", "d'4 g' "),
'j':("a4 a ", "g'4 g' "),
'k':("a2 ", "<g' a'>4 g' "),
'l':("e4 g ", "a'4 a' "),
'm':("c4 e ", "a'4 g' "),
'n':("e4 c ", "a'4 g' "),
'o':("<c a g>2 ", "a'2 "),
'p':("a2 ", "e'4 <e' g'> "),
'q':("a2 ", "a'4 a' "),
'r':("g4 e ", "a'4 a' "),
's':("a2 ", "g'4 a' "),
't':("g2 ", "e'4 c' "),
'u':("<c e g>2 ", "<a' g'>2"),
'v':("e4 e ", "a'4 c' "),
'w':("e4 a ", "a'4 c' "),
'x':("r4 <c d> ", "g' a' "),
'y':("<c g>2 ", "<a' g'>2"),
'z':("<e a>2 ", "g'4 a' "),
'\n':("r1 r1 ", "r1 r1 "),
',':("r2 ", "r2"),
'.':("<c e a>2 ", "<a c' e'>2")
}
txt = "Love one another and you will be happy. It is as simple as that."
upper_staff = ""
lower_staff = ""
for i in txt.lower():
(l,u) = char2notes[i]
upper_staff += u
lower_staff += l
staff = "{\n\\new PianoStaff << \n"
staff += " \\new Staff {" + upper_staff + "}\n"
staff += " \\new Staff { \clef bass " + lower_staff + "}\n"
staff += ">>\n}\n"
title = """\header {
title = "Love One Another"
composer = "Bernd Klein using Python"
tagline = "Copyright: Bernd Klein"
}"""
print (title + staff)
解决方案
字符串实际上只是字符列表,因此您的 for 循环遍历字符串中的每个字符,找到对应于该字符的元组(或者如果它是大写,则该字符的小写等效项),将元组中的第一个元素附加到您的 lower_staff 字符串使用 += 运算符,对第二个元素和 upper_staff 执行相同的操作。
推荐阅读
- elasticsearch - Elasticsearch 重新索引存储大小差异很大
- javascript - Angular 6 检测图表的变化
- qt - 将 QTextureMaterial 添加到自定义网格中
- javascript - 反应本机中未处理的承诺拒绝错误?
- r - R返回新列而不是新行以获取其他记录
- vba - 更换程序崩溃
- scala - ADT 上的 Scala 模式匹配可能不会对无法访问的代码发出警告
- java - 使用 Arrays.deepToString() 从多维数组中的特定索引打印
- c++ - ResharperC++ 建议将方法设为 const
- gcc - gcc 扩展 asm 返回