Python类问题:如何实现计算两个火箭实例距离的方法
解决Rocket类的distance方法实现问题
嘿,我懂你的意思——你已经清楚两点间的距离计算公式,只是搞不懂怎么在类的方法里拿到另一个火箭实例的坐标来完成计算对吧?别担心,这其实很简单,我一步步给你讲清楚:
核心逻辑说明
你的distance方法已经定义了other参数,这个参数就是另一个Rocket类的实例。在Python的类方法里,你可以直接通过other.x和other.y获取它的当前坐标,再结合当前实例(self)的x、y坐标,代入距离公式就行。
两点(x1,y1)和(x2,y2)的距离公式是:距离 = √[(x2 - x1)² + (y2 - y1)²]
你可以用Python内置的math.sqrt()函数来计算平方根,记得先导入math模块。
修改后的distance方法
把你的distance方法改成下面这样就行:
import math class Rocket: # 其他方法保持不变... def distance(self, other): # 计算横坐标差的平方 x_diff_sq = (self.x - other.x) ** 2 # 计算纵坐标差的平方 y_diff_sq = (self.y - other.y) ** 2 # 代入公式返回距离 return math.sqrt(x_diff_sq + y_diff_sq)
如果不想导入math模块,也可以用指数运算**0.5来代替平方根计算:
def distance(self, other): return ((self.x - other.x)**2 + (self.y - other.y)**2)**0.5
额外小提示(帮你优化现有代码)
顺便提几个你代码里的小问题,不影响核心功能,但可以让代码更严谨:
get_position方法里的拼写错误:curret应该改成currentcrash方法的逻辑有点反直觉:现在它返回True当y >= 0(安全状态),返回False当y < 0(坠毁),但方法名是crash,建议改成is_safe会更易懂,避免混淆move_up方法里的坠毁检查只在移动y轴时触发,但move和move_side方法没有做同样的检查,可能会导致火箭y坐标为负却不触发重置
使用示例
最后给你一个使用distance方法的例子,方便你测试:
# 创建两个火箭实例 rocket1 = Rocket((10, 20)) rocket2 = Rocket((30, 40)) # 计算并打印两者之间的距离 print("两个火箭之间的距离是:", rocket1.distance(rocket2))
内容的提问来源于stack exchange,提问作者Piotrek Wcisło
相关产品推荐
相关产品推荐

