如何在Python中实现赛马距离单位转换?
赛马距离单位转米数的Python实现
实现思路
拆解输入的距离字符串,逐一识别每个部分的数值和单位,按照给定规则(1浪=200米,1英里=1600米)计算各部分对应的米数,最后求和得到总距离。
代码实现
def convert_race_distance_to_meters(distance_str): total_meters = 0.0 # 统一转为小写,兼容大小写输入 distance_lower = distance_str.lower() # 按空格拆分各个距离组件 components = distance_lower.split() for comp in components: # 处理英里单位 if 'm' in comp: num_part = comp.replace('m', '') # 解析整数或分数形式的数值 if '/' in num_part: numerator, denominator = num_part.split('/') miles = float(numerator) / float(denominator) else: miles = float(num_part) total_meters += miles * 1600 # 处理浪单位 elif 'f' in comp: num_part = comp.replace('f', '') if '/' in num_part: numerator, denominator = num_part.split('/') furlongs = float(numerator) / float(denominator) else: furlongs = float(num_part) total_meters += furlongs * 200 # 返回整数结果(需保留小数可去掉int()) return int(total_meters) # 测试用例 print(convert_race_distance_to_meters('7F')) # 输出:1400 print(convert_race_distance_to_meters('1m')) # 输出:1600 print(convert_race_distance_to_meters('1m 1/2f')) # 输出:1700 print(convert_race_distance_to_meters('2m 3/4f')) # 输出:3350
代码说明
- 大小写兼容:将输入转为小写,不管输入是
F/f、M/m都能正常处理。 - 组合距离拆分:用
split()按空格拆分多单位组合(比如1m 1/2f拆成两个独立部分)。 - 分数解析:支持整数和分数形式的数值输入,比如
1/2f会被解析为0.5浪,对应100米。 - 单位转换:英里乘以1600、浪乘以200,累加后返回整数米数(如需小数结果可移除
int())。
内容的提问来源于stack exchange,提问作者Jack Pols
相关产品推荐
相关产品推荐

