Python3.x使用Haversine公式计算ISS行程时dist变量无法打印求助
问题原因
- 你仅在
while循环内部完成了haversine函数的定义,没有主动调用该函数,所以函数内打印dist的逻辑永远不会触发,自然没有输出 - 额外可优化点:函数不需要放在循环内重复定义,移到全局作用域即可,避免不必要的性能损耗
修复方案
调整函数定义位置,并在获取两次经纬度数据后主动调用haversine函数,修复后的完整代码如下:
#!/bin/python3 import json import urllib.request from time import sleep from math import radians, cos, sin, asin, sqrt # 将haversine函数移到全局作用域定义 def haversine(lon1, lat1, lon2, lat2): # 十进制度数转弧度 lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2]) # haversine公式计算 dlon = lon2 - lon1 dlat = lat2 - lat1 a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2 c = 2 * asin(sqrt(a)) r = 6371 dist = c * r print ("dist:",dist) while True: url = 'http://api.open-notify.org/iss-now.json' response = urllib.request.urlopen(url) result = json.loads(response.read()) time = result['timestamp'] location = result['iss_position'] lat1 = float(location['latitude']) lon1 = float(location['longitude']) sleep(.5) url = 'http://api.open-notify.org/iss-now.json' response2 = urllib.request.urlopen(url) result2 = json.loads(response2.read()) time2 = result2['timestamp'] location2 = result2['iss_position'] lat2 = float(location2['latitude']) lon2 = float(location2['longitude']) # 主动调用haversine函数触发计算和打印 haversine(lon1, lat1, lon2, lat2) sleep(.5)
内容的提问来源于stack exchange,提问作者racoon_28
相关产品推荐
相关产品推荐

