三维锥体的表面积和体积

时间:2013-02-19 22:55:18

标签: python volume area sqrt

编写一个程序,提示用户输入三维圆锥的半径和高度,然后计算并打印圆锥的表面积和体积。表面积和体积的计算将在函数中完成,输入的收集也是如此。

此部分的程序将按如下方式运行:

  1. 打印出一条消息,说明该程序的功能。
  2. 以英尺为单位提示用户输入半径(非负浮动)。
  3. 以英尺提示用户身高(非负浮动)。
  4. 打印半径和高度,但舍入为2位小数。
  5. 打印表面区域和体积,四舍五入为2位小数。
  6. 这是我到目前为止所做的:

    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'
    

    任何人都可以帮助我通过这个小墙块我认为'浮动'是问题的一部分。 我认为设置很好,但执行是问题。

1 个答案:

答案 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调用来调试它,以确保每个值都是您认为的值。