不断收到错误'函数@ 0xb6ff9924(或类似的东西)'

时间:2016-07-11 06:08:22

标签: python python-2.7 function raw-input

我正在尝试创建一个计算形状区域的小程序。什么时候我把它打印出来的形状名称"在0xetc"处起作用。我很想知道问题出在哪里。我知道我的area函数可能搞砸了,但我无法调试它。我最初认为我已经定义了与形状相同名称的函数,它是从输入调用它们但是我更改了名称并获得相同的消息。这是代码:

#geometry program

#shapes

def squar(x, y):
    result = x * y
    return result

def rectangl(x, y):
    result = x * y
    return result

def circl(r):
    result = 3.14 * (r^2)
    return result

def triangl(h, b):
    result = (h^b * b)/2
    return result

s = raw_input("Shapes are square, rectangle, circle or triangle. Pick a shape and I will calculate its area. ")



#Calculating the area

def area(s):
   if str(s) == "square":
        x = int(raw_input("Height? "))        
        y = int(raw_input("Width?" ))
        squar(x, y)
        return squar
    elif str(s) == "rectangle":
        x = int(raw_input("Height? "))        
        y = int(raw_input("Width?" ))
        rectangl(x,y)
        return rectrangl
    elif str(s) == "circle":
        r = int(raw_input("Radius?" ))
        circl(r)
        return circl
    elif str(s) == "triangle":
        h = int(raw_input("Height?" ))
        b = int(raw_input("Base Width?" ))
        triangl(h, b)
        return triangl

    else:
        print "I don't know that one"


print area

感谢 PS。如果缩进看起来有点或一两个空格,那是因为这里的格式。当我运行程序时,他们不会抛出任何错误。

3 个答案:

答案 0 :(得分:1)

您总共需要修复6个错误:

  • area()课程中,删除您拥有的所有4条返回说明。
  • 由于您在area()中调用的4种方法返回值,您需要按以下方式显示其结果:print method_name(arguments)
  • 最后,您必须正确实例化课程area()

以下是修复上述错误的方法:

# Shapes
def squar(x, y):
    result = x * y
    return result

def rectangl(x, y):
    result = x * y
    return result

def circl(r):
    result = 3.14 * (r^2)
    return result

def triangl(h, b):
    result = (h^b * b)/2
    return result

s = raw_input("Shapes are square, rectangle, circle or triangle. Pick a shape and I will calculate its area. ")

# Calculating the area
def area(s):
    if str(s) == "square":
        x = int(raw_input("Height? "))        
        y = int(raw_input("Width?" ))
        print squar(x, y)
    elif str(s) == "rectangle":
        x = int(raw_input("Height? "))        
        y = int(raw_input("Width?" ))
        print rectangl(x,y)
    elif str(s) == "circle":
        r = int(raw_input("Radius?" ))
        print circl(r)
    elif str(s) == "triangle":
        h = int(raw_input("Height?" ))
        b = int(raw_input("Base Width?" ))
        print triangl(h, b)
    else:
        print "I don't know that one"

area(s)

答案 1 :(得分:0)

你的主要问题很简单,你不要调用这些功能。

在你的最后一行print area,你得到的是该函数所在的内存中的位置,你需要用你之前定义的变量print area(s)将其称为s

然后在你的函数area中你做了同样的事情,看起来你认为函数调用的结果是神奇地保存在与函数同名的变量中,但事实并非如此,你需要和你的 shape 函数做同样的事情,将结果保存在变量中并返回它,例如

result = squar(x,y)
return result

或更好,直接返回结果

return squar(x,y)

在python中,一切都是一个对象,包含了函数,所以当你执行return squar时,你将返回一个函数对象。

您的代码的更正版本可能是:

#geometry program

#shapes

def rectangl(x, y):
    return  x * y

def circl(r):
    return 3.14 * (r**2)

def triangl(h, b):
    return (h^b * b)/2

#Calculating the area    

def area(s):
   if s == "square" or s == "rectangle":
        x = int(raw_input("Height? "))        
        y = int(raw_input("Width?" ))
        return rectangl(x, y)
    elif s == "circle":
        r = int(raw_input("Radius?" ))
        return circl(r)
    elif s == "triangle":
        h = int(raw_input("Height?" ))
        b = int(raw_input("Base Width?" ))
        return triangl(h, b)
    else:
        print "I don't know that one"

s = raw_input("Shapes are square, rectangle, circle or triangle. Pick a shape and I will calculate its area. ")
print area(s)       

您的代码的另一个原因是您不需要在已经是字符串的内容中调用str;方形也是一个矩形,你可以使用相同的功能;和**中的2**5完成了python中的取幂;还有其他的事情,比如打印一条抛出异常的消息,但我把它留给你的味道

答案 2 :(得分:0)

我认为你对函数名称及其返回值感到困惑,这是从How to Think Like a Computer Scientist学到的东西:

“在Python中,函数是一个命名的语句序列,它们属于一起。” “return语句后跟一个被计算的表达式。它的结果作为调用这个函数的”果实“返回给调用者。” 函数本身是一个对象,它的名称就像一个变量名,但它的名字表示一段代码的入口点。这就是为什么当你调用print语句来打印函数名时,它打印函数... @ ....,你的真正目的是打印出它最后一次调用的返回值。所以我认为你可以做到这一点:

def area(s):
   if str(s) == "square":
        x = int(raw_input("Height? "))        
        y = int(raw_input("Width?" ))
        squar_return_value = squar(x, y)
        return squar_return_value
                 .
                 .
                 .

print area(s)

'squar_return_value ='中的赋值将创建一个与函数调用“squar(x,y)”返回的对象关联的变量名称,然后您可以像使用x,y一样使用squar_return_value。 我希望这可以帮助您理解函数名称与其返回值之间的区别。