如何修复计算字典列表中最远行星、返回None的Python代码?
代码问题排查
- 逻辑判断永远不成立:每次循环内先将
plane赋值为当前计算的tempval,后续判断tempval > plane的条件永远为假,没有触发返回的时机,函数执行完默认返回None - 运算括号位置错误:计算y坐标平方时括号嵌套错误,正确的计算逻辑应该是三个坐标分别平方后相加,原代码中y的平方和z的平方被错误包裹在同一个
int()转换的括号内 - 不必要的类型转换:题目明确说明坐标值为正浮点数,使用
int()转换会丢失精度,影响距离计算结果 - 提前返回逻辑错误:即使判断条件成立,直接在循环内返回当前行星,没有完成全列表遍历,无法保证返回的是全列表最远的行星
- 缺少最远行星的存储变量:代码仅记录了距离值,没有存储对应最远行星的字典,遍历完成后无法返回正确结果
正确实现代码
import math def farthest_planet(planets): max_distance = 0 farthest = None for planet in planets: # 计算3D距离:√(x² + y² + z²) distance = math.sqrt(planet['x'] ** 2 + planet['y'] ** 2 + planet['z'] ** 2) if distance > max_distance: max_distance = distance farthest = planet return farthest
优化提示:如果不需要输出实际距离仅做大小比较,可以省略
math.sqrt计算,直接比较平方和即可,结果一致且运算效率更高。
效果测试
运行示例输入:farthest_planet([{ 'x': 1, 'y': 2., 'z': 3. }, { 'x': 10., 'y': 20., 'z': 30. }])
返回结果:{'x': 10.0, 'y': 20.0, 'z': 30.0},符合需求要求。
内容的提问来源于stack exchange,提问作者Aaron Valentine
相关产品推荐
相关产品推荐

