该程序正确地接收了所有输入,但是当用户输入所有需要移调的和弦时,该程序仅对其进行正向移位(不执行if语句的负向移位部分)< / p>
我已经意识到,如果我交换程序的正向和负向移位部分。该程序仅执行负移位,我无法解决该问题。(如果省略了if语句的两个分支中的一部分或部分语句,则问题仍然存在(省略了elif = ='2'向前)
usr_list = ['A','BB','B','C','C#','D','EB','E','F','F#','G','AB']
while len(u_list)>0:
chord = (u_list[0])
if sign == '1' or '+':
sign = '+'
chord_value = int(usr_list.index(chord))
chord_transpose = chord_value + t_key
if chord_transpose >= 12:
chord_transpose = chord_transpose - 12
print('Greater than 12',usr_list[chord_transpose])
elif chord_transpose < 12:
del u_list[0]
t_list.append(usr_list[chord_transpose])
else:
print('Invalid')
elif sign == '2' or '-':
sign = '-'
chord_value = int(usr_list.index(chord))
chord_transpose = chord_value - t_key
if chord_transpose >= 12:
chord_transpose = chord_transpose + 12
print('Greater than 12',usr_list[chord_transpose])
elif chord_transpose < 12:
del u_list[0]
t_list.append(usr_list[chord_transpose])
else:
print('Invalid')
else:
print('Invalid')
print('transposition of those chords by',sign+str(t_key),'is',t_list)
当用户输入介于1和12之间的移调值并从列表中选择和弦时,应以正或负的方式执行其所选符号的移调,但是由于某些原因,即使用户选择了负移调,程序也会执行正移移
答案 0 :(得分:1)
如果要评估多个if,则需要为每个if而不是elif使用if。当您现在编写代码时,只要满足其中一个条件,就不会考虑其他条件,因为只有在前面的if语句不正确时才检查elif。
例如:
str = 'abc'
if 'a' in str:
print 'a'
elif 'b' in str:
print 'b'
elif 'c' in str:
print 'c'
这只会打印一个。如果要打印a-c,则必须使用:
str = 'abc'
if 'a' in str:
print 'a'
if 'b' in str:
print 'b'
if 'c' in str:
print 'c'
这样,它将检查所有条件,而不仅仅是检查第一个真实条件。
答案 1 :(得分:0)
发现了问题:)
if sign == '1' or '+':
和elif sign == '2' or '-':
应该
if sign == '1' or sign == '+':
和elif sign == '2' or sign == '-':
每当符号为2时,python都会按以下方式读取if语句
(符号== 1)或('+') 哪个解决 (false)或(true)
意思是if语句每次都运行。
我们都犯的小句法错误,希望这对您有所帮助!