-3

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

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

  1. 打印出一条消息,指出程序的作用。
  2. 提示用户以英尺为单位的半径(非负浮点数)。
  3. 提示用户以英尺为单位的高度(非负浮点数)。
  4. 打印半径和高度,但四舍五入为 2 位小数。
  5. 打印表面积和体积,四舍五入到小数点后 2 位。

这是我到目前为止所做的:

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'

谁能帮我通过这个小墙块,我认为“浮动”是问题的一部分。我认为设置很好,但执行是问题所在。

4

1 回答 1

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那一行的 for 是什么?你认为"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调用来调试它,以确保每个值都是您认为应该的值。

于 2013-02-19T22:59:40.803 回答