2015-11-12 23 views
-2

我正在尝试构建一个简单的计算器。我只想让用户输入两个数字和一个操作,然后为了显示计算结果,然后再次循环输入两个数字。如果用户输入了无法识别的操作,我想循环回'输入操作'。Python - 循环

这是为什么不工作:

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

num1num2numPic定义是局部的功能。你需要返回它们并将它们传递给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

你有一些错误。首先,num1num2是本地的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

非常感谢,我会阅读'真实'。 – dandannn