我想写一个功能,当我输入截锥(杯子)的尺寸和一公升的液体量时,这些杯子可以填充多少液体。我明白1L = 1000 cm ^ 3但我不明白如何将其合并到我的代码中以返回我期望的结果
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)
这是我所拥有的,我知道我很接近,但我不明白如何说出我的转换,
答案 0 :(得分:1)
这取决于给出bottom_radius,top_radius和height的单位。如果我们假设那些长度以cm为单位,那么
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
升为cm ^ 3。 int()
可以替换为math.floor()
,如果预计会有完整满杯的数量,math.ceil()
将会提供完整或部分填充的杯数。
最后,有一个很好的包magnitude,它封装了一个物理量。如果用户想要指定不同的长度单位,您可以使用此包。
OP所述的公式是正确的。
答案 1 :(得分: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)
如果您不知道,Python2和Python3中的区别是不同的。
Python 2
>>> 1/2
0
Python 3
>>> 1/2
0.5
>>> 1//2
0
答案 2 :(得分: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)