2016-01-20 41 views
1

这是一个基本的计算器。任何人都可以帮我在我的代码中定义'ans'。它说第14行错误。我对python很陌生,不知道如何,我很困难。我还需要确保下一次调用函数时,总和的答案将被转入下一个总和。Python计算器/定义

def rep(num1,ans): 
    num2 = int(input("Next number? ")) 
    choice = input("select operation -,+,x,/. ") 
    if (choice == "+"): 
     ans= (num1+num2) 
    elif (choice == "-"): 
     ans= (num1-num2) 
    print (ans) 
num1 = int(input("First number? ")) 
rep(num1, ans) 

morenum = ("yes") 
morenum = input("Do you want to use another number? ") 
while (morenum == "yes"): 
    rep(ans, num1) 

回答

1

您正在使用ans之前,你定义它:rep(num1, ans)

初始化ans这样,而不是:

ans = int(input("First number? ")) 
morenum = "yes" 
while (morenum == "yes"): 
    morenum = input("Do you want to use another number? ") 
    rep(ans, num1) 

注意morenum = input("Do you want to use another number? ")需要在回路中,否则将不会被调用每一个你需要它的时候。

还有一个问题,答案不是从函数返回,因此不会更新,因为它应该,但这是作为OP的练习。

0

我看到这个代码有几个不同的问题。不过没有什么不能修复的!

首先,注意间距/缩进。 Python使用它来知道如何“读”你的程序,并告诉他们哪些代码行与其他代码。我敢肯定,在这里一些有用的用户编辑您的原始q将有适当的缩进:-)

def rep(num1,ans): 
    num2 = int(input("Next number? ")) 
    choice = input("select operation -,+,x,/. ") 
    if (choice == "+"): 
     ans = (num1+num2) 
    elif (choice == "-"): 
     ans = (num1-num2) 
    elif (choice == "x"): 
     ans = (num1*num2) 
    elif (choice == "/"): 
     ans = (num1/num2) 
    print (ans) 

num1 = int(input("First number? ")) 
rep(num1, ans) 

这是你的第一个代码块,在其中定义rep功能与一些固定的间距。问题在于,你在传递ans时没有定义它。只是将其删除作为参数,而是已经ans获得由rep返回:

def rep(num1): 
    num2 = int(input("Next number? ")) 
    choice = input("select operation -,+,x,/. ") 
    if (choice == "+"): 
     ans= (num1+num2) 
    elif (choice == "-"): 
     ans= (num1-num2) 
    elif (choice == "x"): 
     ans= (num1*num2) 
    elif (choice == "/"): 
     ans= (num1/num2) 
    return ans 

num1 = int(input("First number? ")) 
rep(num1) 

开,2号地块:

morenum = ("yes") 
morenum = input("Do you want to use another number? ") 
while (morenum == "yes"): 
    rep(num1) 

这是你的代码变得有点靠不住。您最初定义了morenum变量,然后将其替换为输入。此外,这不会按照您认为的方式工作 - 我认为您的印象是,这会询问用户他们是否想在之后想要另一个号码,然后他们每次都完成数学运算。为了实现这一点,使用此代码来代替:

while True: 
    morenum = input("Do you want to use another number? ") 
    if morenum == 'yes': 
     num1 = int(input("First number? ")) 
     rep(num1) 
    else: 
     quit() 
0

您试图在这一范围不断初始化之前传递变量ANS的功能代表。 试试这个:

num1 = int(input("First number? ")) 
ans=0 
rep(num1, ans) 

或者你可以简单地调用代表法这样rep(num1, None)也许这样rep(num1, 0),它会工作。

虽然更好的方法是:

def rep(num): 
    num_two = int(input("Next number? ")) 
    choice = input("select operation -,+,x,/. ") 
    if choice == "+": 
     ans = num+num_two 
    elif choice == "-": 
     ans= num-num_two 
    elif choice == "x": 
     ans= num*num_two 
    elif choice == "/": 
     ans= num/num_two 
    print(ans) 
num = int(input("First number? ")) 
rep(num) 
0

嗯,说实话,我不知道为什么你答的代码中的参数。如果我是你,我只希望做这样的:

def rep(): 
    goes+=1 
    firstnum = int(raw_input("first number?") #I am guessing you're using python 2.7 
    secondnum = int(raw_input("second number?") 
    operation = raw_input("operation") 
    if operation=="+": 
     sum = firstnum+secondnum 
     return sum 
    elif operation=="-": 
     diff = firstnum-secondnum 
     return diff 
    elif operation=="*": 
     product = firstnum*secondnum 
     return product 
    elif operation=="/": 
     quo = float(firstnum)/float(secondnum) #to make sure there's no rounding 
     return quo 
    else: 
     raise ValueError("Improper entry!") 

这个新功能可以直接这样调用:

result = rep()