编写一个程序,提示用户输入三维圆锥的半径和高度,然后计算并打印圆锥的表面积和体积。表面积和体积的计算将在函数中完成,输入的收集也是如此。
此部分的程序将按如下方式运行:
import math
print("This Program will calculate the surface area and volume of a cone."
"\nPlease follow the directions.")
print()
print()
r = input(str("What is the radius in feet? (no negatives): "))
h = input(str("What is the height in feet? (no negatives): "))
math.pi = (22.0/7.0)
math.sqrt()
surfacearea = int(math.pi*r**2)+int(r*math.pi(math.sqrt(r**2+h**2)))
print("The surface area is", surfacearea)
print()
volume = (1/3)*math.pi*r**2*h
print ("The volume is", volume)
print()
print("Your Answer is:")
print()
print("A cone with radius", r, "\nand hieght", h,"\nhas a volume of : ",volume,
"\nand surface area of", surfacearea,)
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
TypeError: can't multiply sequence by non-int of type 'float'
任何人都可以帮助我通过这个小墙块我认为'浮动'是问题的一部分。 我认为设置很好,但执行是问题。
答案 0 :(得分:2)
我假设你正在使用Python 3,所以input
只是返回一个字符串。
所以:
r = input(str("What is the radius in feet? (no negatives): "))
# ...
surfacearea = int(math.pi*r**2) #+ ...
这会引发此错误,因为您正在尝试对字符串进行平方。你不能这样做。
如果您在r = float(r)
之后添加input
,那么它会为您提供一个浮动(您可以对其进行平方),或者如果用户键入了错误,则会引发异常。
与此同时,该行的str
是什么?您认为"What is the radius in feet? (no negatives): "
是什么类型的?你是想要完成某件事,还是只是在不知道原因的情况下插入它?
同样,在这一行:
surfacearea = int(math.pi*r**2)+int(r*math.pi(math.sqrt(r**2+h**2)))
为什么要将浮点值转换为int
?赋值表示值应“舍入为2位”。
更一般地说,如果你在某些代码行上出错并且不知道为什么,请尝试分解它。那一行发生了很多事情。为什么不试试这个:
r_squared = r**2
pi_r_squared = math.path * r_squared
int_pi_r_squared = int(pi_r_squared)
h_squared = h**2
r_squared_h_squared = r_squared + h_squared
sqrt_r2_h2 = math.sqrt(r_squared_h_squared)
# etc.
然后你可以看到哪一个不起作用,并找出原因,而不必看一大堆代码和猜测。您甚至可以通过在特定行添加pdb
个断点或print
调用来调试它,以确保每个值都是您认为的值。