2015-01-28 3 views
0

Я пишу код для калькулятора, используя python.Почему IF не работает внутри цикла WHILE? (Python 3.4)

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 

Ниже секции капельной перечисленные здесь, есть другие разделы для вычитания, умножения и т.д., которые используют Элиф вместо IF (как они должны быть?). Проблема заключается в том, что когда пользователь выбирает опцию для калькулятора (сложение, вычитание ...), он вместо этого обращается к циклу while, не выполняя никаких инструкций IF или ELIF. Операции IF не работают внутри цикла WHILE?

+2

Там нет необходимости комментировать каждую строку в источнике код, особенно если комментарий просто повторяет код – Jasper

+0

Эта проблема может быть трудно понять ... 'print (choice)' похоже, показывает целое число ... но 'print (repr (выбор))' показывает, что это действительно строка (которая никогда не равна целому числу). – tdelaney

+0

@ Jasper Я прокомментировал каждую строку, чтобы привыкнуть делать комментарии вообще. Я не собираюсь комментировать ненужные строки в будущем, это просто поможет мне научиться делать это на ранней стадии. – stapler8

ответ

4

Вот ваша проблема:

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 
+1

Простой способ продемонстрировать это: запустите интерпретатор ('python3') и введите' 1 == "1" '. Результатом является 'False'. –

Смежные вопросы