2015-11-12 4 views
-2

Я пытаюсь построить простой калькулятор. Я просто хочу, чтобы пользователь вводил два числа и операцию, затем для вычисления, чтобы показать, а затем снова вернитесь, чтобы снова ввести два числа. Если пользователь вводит операцию, которая не распознана, я хочу вернуться к «enter operation».Python - looping

Почему это не работает:

def add (a,b): 
    return a + b 

def minus (a,b): 
    return a - b 

def multi (a,b): 
    return a * b 

def div (a,b): 
    return a/b 

def numPic(): 
    num1 = int(input("Type a number: ")) 
    num2 = int(input("Type another number: ")) 

def opPic(): 
     op = input("Type an operation (add,minus,multi,div):") 
     if op == "add": 
      print (add (num1,num2)) 
     elif (op == "minus"): 
      print (minus(num1,num2)) 
     elif (op == "multi"): 
      print (mulit(num1,num2)) 
     elif (op == "div"): 
      print (div(num1,num2)) 
     else : 
      print ("operation not recognised") 
      opPic() 

print ("Hello User") 
numPic() 
opPic() 
+0

Затем используйте цикл. – Maroun

+0

Вы не используете цикл. – Zety

+0

У вас нет кодов в коде. Я предполагаю, что вы получаете 'NameError' пытается получить доступ к 'num1' и' num2'? – Holloway

ответ

0

num1 и num2 вы определяете в numPic являются локальными по отношению к этой функции. Вам необходимо вернуть их и передать их функции opPic для их использования.

def numPic(): 
    num1 = int(input("Type a number: ")) 
    num2 = int(input("Type another number: ")) 
    return num1, num2 

def opPic(num1, num2): 
    #the same code as before 
    #except changing opPic() to opPic(num1, num2) 

print ("Hello User") 
num1, num2 = numPic() 
opPic(num1, num2) 

Есть лучшие способы сделать то, к чему вы, похоже, стремились. Вы фактически не использовали цикл и вместо этого использовали рекурсию.

+2

Просто, чтобы указать, это ошибка в коде, а не ответ на его вопрос. – kazbeel

+0

@WoozyCoder, вопрос был «почему это не работает?» По общему признанию, это не то, как я решил проблему, но все же. – Holloway

+0

ДА! Это работает, но, как вы указали, кажется, что я достигаю этого неортодоксальным образом. – dandannn

2

У вас есть несколько ошибок. Во-первых, num1 и num2 являются локальными для numPic - не глобальных. Так что вам нужно, чтобы вернуть их к абоненту, и вызывающий абонент должен пройти их opPic():

def numPic(): 
    num1 = int(input("Type a number: ")) 
    num2 = int(input("Type another number: ")) 
    return num1, num2 

def opPic(num1, num2): 
    op = input("Type an operation (add,minus,multi,div):") 
    if op == "add": 
     print (add (num1,num2)) 
    elif (op == "minus"): 
     print (minus(num1,num2)) 
    elif (op == "multi"): 
     print (mulit(num1,num2)) 
    elif (op == "div"): 
     print (div(num1,num2)) 
    else : 
     print ("operation not recognised") 
     opPic (num1, num2) 

num1, num2 = numPic() 
opPic (num1, num2) 

Чтобы сделать петлю на основе, вы могли бы сделать что-то вроде:

def opPic(num1, num2): 
    while True: 
     op = input("Type an operation (add,minus,multi,div):") 
     if op == "add": 
     print (add (num1,num2)) 
     elif (op == "minus"): 
     print (minus(num1,num2)) 
     elif (op == "multi"): 
     print (mulit(num1,num2)) 
     elif (op == "div"): 
     print (div(num1,num2)) 
     else : 
     print ("operation not recognised") 
     continue 

     break 

Хотелось бы надеяться, вы можете определить другой бит самостоятельно, так как это похоже на школьное задание.

+0

спасибо за это, я прочитаю «while true». – dandannn