如何在Python中通过方程/函数实现值递增并循环计算求和?
问题解决:循环计算多组A、B对应的降雨总量
原代码问题分析
- 用带状态的函数维护A、B的递增值,导致状态混乱:之前的
print循环已经将A推进到300、B推进到1.6,后续调用会从这些值继续递增,而非从初始值开始计算。 - 仅调用一次
RAD(),无法生成多组A、B组合对应的计算结果。
修改后的代码
import pandas as pd # 读取Excel数据 data = pd.read_excel(r'C:\Users\garyj\OneDrive\Documents\Data\20220204Python\PineMountain.xlsx') df = pd.DataFrame(data, columns=['RD', 'RG']) # 生成A的数值序列:200到300,步长10(共11个值) a_values = list(range(200, 310, 10)) # 生成B的数值序列:1.4、1.5、1.6 b_values = [1.4 + i * 0.1 for i in range(3)] # 定义计算RADAR的函数,传入当前的A和B值 def calculate_radar(a, b, df): return ((1/a) * df['RD'] ** (1/b)) * 0.0393701 # 嵌套循环:先遍历所有A值(优先级更高),再遍历每个A对应的B值 for a in a_values: print(f"\n=== 当前A值: {a} ===") for b in b_values: radar = calculate_radar(a, b, df) total_rain = radar.sum() print(f"B值: {b} | 总降雨量: {total_rain:.4f} 英寸")
关键改动说明
- 用显式序列替代状态函数:直接生成A、B的所有待计算值,避免函数状态带来的混乱。
- 嵌套循环实现优先级:外层遍历A的所有值,内层遍历每个A对应的B值,满足A优先级更高的需求。
- 封装计算逻辑:将RADAR的计算封装成函数,传入当前A、B值和DataFrame,每次计算独立无干扰。
- 清晰的结果输出:打印每个A、B组合对应的总降雨量,方便查看所有计算结果。
内容的提问来源于stack exchange,提问作者Jalon Gary
相关产品推荐
相关产品推荐

