Python代码正确性咨询:实现公里转英里的双函数功能
代码正确性判断与优化建议
需求与示例
需求说明:需在main()中调用distanceTravelled和kmToMileOutput两个函数,获取用户输入的5个浮点型公里数生成列表,遍历列表将每个元素转换为英里后打印结果。
输入示例:
Enter distance in KM: 2
Enter distance in KM: 5.5
Enter distance in KM: 1
Enter distance in KM: 4
Enter distance in KM: 8输出示例:
[2.0, 5.5, 1.0, 4.0, 8.0]
Converted output: [1.2428, 3.4177, 0.6214, 2.4856, 4.9712]
用户提交的代码
def kmToMileOutput(distance_covered): miles = distance_covered * 0.621371 return miles def distanceTravelled(): lst = [] for i in range(5): ele = float(input("Enter distance in Km: ")) lst.append(ele) # adding the element print(lst) lst2 = [] for list in lst: x = list * 0.621371 lst2.append(x) print("Converted output:",lst2) def main(): distanceTravelled() kmToMileOutput(2) main()
代码存在的问题
- 未复用已定义函数:
distanceTravelled中硬编码了公里转英里的计算逻辑,没有调用已经写好的kmToMileOutput,违背了代码复用原则。 - 冗余无效调用:
main里的kmToMileOutput(2)仅计算了2公里转英里的结果,但没有输出或使用这个值,属于无效代码。 - 变量命名冲突:循环中使用
list作为变量名,这是Python内置类型的名称,容易引发混淆和潜在错误。 - 输出精度不符:示例中转换结果保留4位小数,当前代码会输出更多小数位,格式不一致。
修正后的代码
def kmToMileOutput(distance_covered): miles = distance_covered * 0.621371 # 保留4位小数,匹配示例输出格式 return round(miles, 4) def distanceTravelled(): lst = [] for i in range(5): ele = float(input("Enter distance in Km: ")) lst.append(ele) print(lst) lst2 = [] # 替换变量名为km,避免覆盖内置类型 for km in lst: # 复用kmToMileOutput完成转换 x = kmToMileOutput(km) lst2.append(x) print("Converted output:", lst2) def main(): # 调用distanceTravelled即可完成全部流程 distanceTravelled() main()
修正说明
- 让
distanceTravelled复用kmToMileOutput函数,确保转换逻辑统一。 - 移除
main中的冗余调用,简化执行流程。 - 修改循环变量名,避免命名冲突。
- 添加
round函数控制输出精度,和示例格式保持一致。
内容的提问来源于stack exchange,提问作者newbie player
相关产品推荐
相关产品推荐

