You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:57:02