想在Python中将cm³转换为L
我想写一个函数,当我输入一个截头圆锥(比如杯子)的尺寸和液体的体积(单位是升)时,能够告诉我可以用这些液体装满多少个这样的杯子。我知道1升等于1000立方厘米,但我不太明白怎么把这个转换关系用到我的代码里,以得到我想要的结果。
def number_of_cups(bottom_radius, top_radius, height, litres_of_liquid):
volume = math.pi / 3 * height * (bottom_radius**2 + top_radius * bottom_radius + top_radius**2)
return int(filled_cup)
这是我目前的进展,我知道我快到了,但我不太明白该怎么写我的转换部分。
3 个回答
0
我来分享一下我的答案:
#!/usr/bin/python2
import math
# nothing about units here , but let's say it's cm
def cup_vol(b_rad=3, t_rad=4, h=5):
vol = math.pi/3 * (b_rad**2 + t_rad + b_rad + t_rad**2) * h
return vol
def n_cups(liquid_amount, whole_cups=True): # nothing about units here
# liquid amount is Liter then first convert it to CM^3
liquid_amount = liquid_amount*1000
# this yields an int
if whole_cups:
return int(liquid_amount/cup_vol())
# else, return a real number with fraction
return liquid_amount/cup_vol()
if __name__ == '__main__':
print "4L fill %f cups" % n_cups(4)
print "4L fill %f cups (real)" % n_cups(4, whole_cups=False)
运行上面的脚本会得到:
4L fill 23.000000 cups
4L fill 23.873241 cups (real)
0
好的,我想指出一下,你的体积计算似乎有问题。
def number_of_cups(bottom_radius, top_radius, height, litres_of_liquid):
volume = 4 * math.pi * height * (bottom_radius**2 + top_radius**2)/2
filled_cup = 1000 * litres_of_liquid / volume
return int(filled_cup)
另外,如果你不知道的话,Python 2 和 Python 3 的除法运算是不同的。
Python 2
>>> 1/2
0
Python 3
>>> 1/2
0.5
>>> 1//2
0
1
这要看底部半径、顶部半径和高度的单位是什么。如果我们假设这些长度是用厘米表示的,那么
def number_of_cups(bottom_radius, top_radius, height, litres_of_liquid):
volume = math.pi / 3 * height * (bottom_radius**2 + top_radius * bottom_radius + top_radius**2)
return int( litres_of_liquid * 1000 / volume )
litres_of_liquid * 1000
是把升转换成立方厘米。这里的 int()
可以换成 math.floor()
,如果你想要的是完全装满的杯子数量;而 math.ceil()
则会给出装满或部分装满的杯子数量。
最后,有一个很不错的工具包 magnitude,它可以处理物理量。如果用户想要指定不同的长度单位,可以使用这个工具包。
提问者所说的公式是正确的。