为什么 IF 在 WHILE 循环中似乎不起作用? (Python 3.4)

Why doesn't IF seem to work inside a WHILE loop? (Python 3.4)

我正在使用 python 为计算器编写代码。

loop = 1
while loop == 1:    #loop calculator while loop is TRUE
    print   ("""Options:
        Addition       1)
        Subtraction    2)
        Multiplication 3)
        Division       4)
        Quit           5)   
        Reset Sum      6) """)      #display calculator's options
    (' ')   #spacer
    choice = input("option: ")  #get user input for calculator options
#----------------------------------------------------------------------------Addition
    if choice == 1:     #check if user wants to add
        print (' ') #spacer
        print ('Addition Loaded!')  #tell the user they are adding
        print (' ') #spacer
        add1 = int(input('Base Number'))    #get value for add1
        sum = int(input('Number ta add'))   #get value for sum
        sum = add1 + sum    #make sum equal the sum of add1 and sum
        print (str(sum))    #print sum
        addloop = 1     #set addloop to TRUE
        while addloop == 1:     #continue addition while addloop = TRUE
            add1 = int(input('Additional number to add'))   #get value for add1
            if add1 == 0:   #check if add1 equals zero
                print (' ') #spacer
            sum = add1 + sum    #make sum equal the sum of add1 and sum
            if add1 != 0:   #check if add1 is not equal to 0
                print (str(sum))    #print sum
            if add1 == 0:   #check if add1 is equal to 0
                print ('Total: ',)  #print prefix
                print (str(sum))    #print sum
                addloop = 0 #set addloop to FALSE

在此处列出的加法部分下方,还有其他减法、乘法等部分使用 ELIF 而不是 IF(它们应该是?)。问题是,当用户为计算器选择一个选项(加法、减法...)时,它反而循环回到 while 循环,而不经过任何 IF 或 ELIF 语句。 IF 语句在 WHILE 循环中不起作用吗?

这是你的问题:

choice = input("option: ")

在 Python 3 下,这会将 字符串 放入 choice。您需要一个整数:

choice = int(input("option: "))

如果用户键入的不是整数,这将引发 ValueError。您可以使用 try/except ValueError 块来捕获它,或者您可以保留问题中出现的 choice 行并将所有比较更改为如下所示:

if choice == "1":  # compare to a string instead of an integer