如何用Python通过while循环估算可容纳糖粉的10cm高圆柱最小半径
需求说明
现有形状近似直棱柱的糖粉,需要编写Python函数,接收直棱柱的长、宽、高作为输入参数,通过while循环估算高度固定为10cm的圆柱形盒子的最小半径,要求圆柱可以容纳全部糖粉。
原代码存在的问题
- 使用随机整数生成半径的方式,仅能得到整数精度的结果,精度不足,还存在概率性无法命中符合条件的值导致死循环的风险
- 没有按要求封装为接收直棱柱长宽高参数的函数
- 循环判断逻辑错误:圆柱体积含无理数π,不可能与直棱柱体积完全相等,实际只要圆柱体积≥糖粉体积即可满足容纳要求,无需完全相等
可直接运行的实现代码
import math def calc_min_cylinder_radius(rect_len, rect_width, rect_height, cylinder_height=10): # 计算糖粉总体积 sugar_volume = rect_len * rect_width * rect_height # 初始化半径、计算步长(步长越小,结果精度越高) radius = 0.0 step = 0.01 # while循环递增半径,直到圆柱体积足够容纳糖粉 while math.pi * (radius **2) * cylinder_height < sugar_volume: radius += step # 保留两位小数返回结果 return round(radius, 2) # 测试题目中的糖粉尺寸:长8cm、宽6cm、高16cm min_r = calc_min_cylinder_radius(8,6,16) print(f"高度为10cm的圆柱盒最小半径为:{min_r} cm")
代码说明
- 函数默认圆柱高度为10cm,也可根据需求自行修改传入的圆柱高度参数
- 步长设置为0.01,最终结果精度可达0.01cm,可根据实际需求调整步长大小控制精度
- 测试题目中的糖粉尺寸,运行后得到的最小半径约为4.95cm,对应圆柱体积≈770cm³,可完全容纳体积为768cm³的糖粉
内容的提问来源于stack exchange,提问作者knoweldgeSeekingHuman
相关产品推荐
相关产品推荐

