为什么while循环只循环if语句的一部分?

时间:2019-04-03 17:08:57

标签: python python-3.x

该程序正确地接收了所有输入,但是当用户输入所有需要移调的和弦时,该程序仅对其进行正向移位(不执行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之间的移调值并从列表中选择和弦时,应以正或负的方式执行其所选符号的移调,但是由于某些原因,即使用户选择了负移调,程序也会执行正移移

2 个答案:

答案 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语句每次都运行。

我们都犯的小句法错误,希望这对您有所帮助!