想要在python中将cm ^ 3转换为L.

时间:2014-03-23 02:48:35

标签: python

我想写一个功能,当我输入截锥(杯子)的尺寸和一公升的液体量时,这些杯子可以填充多少液体。我明白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)   

这是我所拥有的,我知道我很接近,但我不明白如何说出我的转换,

3 个答案:

答案 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)