如何实现jogging_average函数提取含jogging字符串的parse_time与parse_dist结果
代码实现
1 前置修正
你原有getDigits函数仅提取纯数字,会丢失距离值的小数点,导致距离解析错误,先调整逻辑:
def getDigits(s): answer = [] for char in s.split(";"): k = "" for split_s in char: # 保留数字和小数点,适配带小数的距离值 if split_s.isdigit() or split_s == '.': k += split_s if k: answer.append(k) return answer
原有parse_dist返回的是带km后缀的字符串,如果需要做总距离计算,建议调整为返回数值类型,可按需选择:
# 原逻辑返回带单位字符串 def parse_dist(s): l = getDigits(s) return l[1]+ 'km' # 调整为返回浮点数值,方便后续计算 def parse_dist_num(s): l = getDigits(s) return float(l[1])
2 实现jogging_average函数
下面提供两种常用实现,按需选用:
版本1:返回所有jogging记录的解析结果列表
每个元素为(时长秒数,距离)的元组:
def jogging_average(activities: list[str]): res = [] for act in activities: # 筛选jogging类活动 if 'jogging' in act: time_val = parse_time(act) dist_val = parse_dist(act) res.append((time_val, dist_val)) return res
用你给的示例activities运行,返回结果为:[(2411, '6km'), (2185, '5.3km')]
对应两条jogging记录:40分11秒=2411秒、36分25秒=2185秒
版本2:返回累计总时长、总距离、平均配速
更贴合实际使用场景:
def jogging_average(activities: list[str]): total_time = 0 total_dist = 0 for act in activities: if 'jogging' in act: total_time += parse_time(act) # 这里用调整后的数值版parse_dist_num total_dist += parse_dist_num(act) # 平均配速:分钟/公里,总时间转分钟除以总距离 avg_pace = (total_time / 60) / total_dist if total_dist !=0 else 0 return { '总时长(秒)': total_time, '总距离(km)': total_dist, '平均配速(分/公里)': round(avg_pace, 2) }
示例运行返回结果:{'总时长(秒)': 4596, '总距离(km)': 11.3, '平均配速(分/公里)': 6.78}
内容的提问来源于stack exchange,提问作者Bruffff
相关产品推荐
相关产品推荐

