Python循环优化:如何正确处理未完成的最后一圈迭代
修正后的跑步轨迹记录函数
问题说明
原函数log_track_run在处理未完成的最后一圈(距离小于400米)时,平均配速计算逻辑错误。需要调整:计算平均配速时,不能直接将圈数+1,而是要加上a_last_lap_distance/LAP_DISTANCE的比例值,同时修正之前尝试代码中的语法错误。
错误代码问题点
- 第二个循环使用
range(n_laps[-1]):n_laps是整数(len(a_laps)的结果),整数不支持索引操作,直接触发语法错误。 - 最后一圈无需循环处理,直接针对
a_laps的最后一个元素单独计算即可。 - 平均配速的等效圈数计算错误,应基于前序完整圈数加上最后一圈的距离比例,而非循环变量。
修正后的代码
LAP_DISTANCE = 400 def log_track_run(a_laps, a_last_lap_distance): r_output = "" total_time = 0 total_distance = 0 n_laps = len(a_laps) average_lap_time = None # 处理前n_laps-1个完整圈 for i_lap in range(n_laps - 1): lap_time = a_laps[i_lap] total_time += lap_time total_distance += LAP_DISTANCE average_lap_time = total_time / (i_lap + 1) r_output += f"lap #{i_lap + 1} time = {lap_time}s, average lap time = {round(average_lap_time)}s, {total_distance}m in {total_time}s\n" # 处理最后一圈(可能不完整) if n_laps > 0: last_lap_time = a_laps[-1] total_time += last_lap_time total_distance += a_last_lap_distance # 计算等效圈数:完整圈数 + 最后一圈距离比例 equivalent_laps = (n_laps - 1) + (a_last_lap_distance / LAP_DISTANCE) average_lap_time = total_time / equivalent_laps # 最后一圈的编号是n_laps r_output += f"lap #{n_laps} time = {last_lap_time}s, average lap time = {round(average_lap_time)}s, {total_distance}m in {total_time}s\n" return r_output
代码说明
- 前序循环处理所有完整的400米圈,累计时间和距离,计算每圈后的平均配速。
- 单独处理最后一圈:累计最后一圈的时间和实际距离,用等效圈数(完整圈数 + 最后一圈距离与400米的比例)计算平均配速,确保未完成圈的配速计算准确。
- 增加
n_laps > 0的判断,避免空列表时的索引错误。
内容的提问来源于stack exchange,提问作者M.J.
相关产品推荐
相关产品推荐

