我正在尝试创建一个计算形状区域的小程序。什么时候我把它打印出来的形状名称"在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。如果缩进看起来有点或一两个空格,那是因为这里的格式。当我运行程序时,他们不会抛出任何错误。
答案 0 :(得分:1)
您总共需要修复6个错误:
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。 我希望这可以帮助您理解函数名称与其返回值之间的区别。