Python中return函数调用异常及变量无法在main函数访问求助
Python重量转换函数问题修复
先拆解你代码里的核心问题,再给出修正方案:
1. return语句的错误用法
- 循环里用
return newWeight.append(...)会直接终止函数,而且append()方法返回的是None,根本不是添加元素后的列表。 - 最后一行
return newWeight == weight * 2.20462是做比较运算,返回布尔值True/False,不是转换后的数值,完全不符合需求。
2. 变量作用域问题
函数内部定义的newWeight是局部变量,外部main()函数根本访问不到,必须通过函数返回值获取转换结果。
3. 功能逻辑混淆
你的函数名是kgToLb(千克转磅),但测试数据是把磅转成千克(比如-22磅对应-9.979千克),下面按测试数据需求(磅转千克)修正,转换系数用0.453592(1磅≈0.453592千克)。
修正后的代码
# 磅转千克转换函数 def lbToKg(weight): if isinstance(weight, list): newWeight = [] for w in weight: newWeight.append(w * 0.453592) return newWeight else: return weight * 0.453592 def main(): weightList = [-22, 11, 0, 8.2, -8.2] answerKgsList = [-9.979044, 4.989522, 0, 3.71946186, -3.71946186] # 获取转换后的完整列表 convertedList = lbToKg(weightList) # 遍历验证每个结果 for idx in range(len(weightList)): # 浮点数值用差值判断近似相等,避免精度误差 correct = abs(convertedList[idx] - answerKgsList[idx]) < 1e-6 print(f"转换后重量: {convertedList[idx]:.6f},是否正确: {correct}") main()
关键修正说明
- 用
isinstance(weight, list)替代type(weight) == list,判断类型更灵活(支持子类)。 - 列表处理时,先把所有元素添加完成再统一return,不会提前终止函数。
main()里通过接收函数返回值convertedList获取转换结果,解决变量访问问题。- 浮点对比不用
==,而是判断差值是否小于极小值(1e-6),避免精度问题导致错误判断。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

