반응형
https://github.com/seulseul627/python-study.git
import math
import requests
def calc_dist(lat1, lon1, lat2, lon2):
lat1 = math.radians(lat1)
lon1 = math.radians(lon1)
lat2 = math.radians(lat2)
lon2 = math.radians(lon2)
h = math.sin( (lat2 - lat1) / 2 ) ** 2 + \
math.cos(lat1) * \
math.cos(lat2) * \
math.sin( (lon2 - lon1) / 2 ) ** 2
return 6372.8 * 2 * math.asin(math.sqrt(h))
def get_dist(meteor):
return meteor.get('distance', math.inf)
if __name__ == '__main__':
my_loc = (29.424122, -98.493628)
meteor_resp = requests.get('https://data.nasa.gov/resource/y77d-th95.json')
meteor_data = meteor_resp.json()
for meteor in meteor_data:
if not ('reclat' in meteor and 'reclong' in meteor): continue
meteor['distance'] = calc_dist(float(meteor['reclat']),
float(meteor['reclong']),
my_loc[0],
my_loc[1])
meteor_data.sort(key=get_dist)
print(meteor_data[0:10])
=> ipython 설치 및 접속
pipenv install -d ipython
ipython
=> meteors 디렉토리에서 "find_meteors.py" 를 import
In [1]: from meteors import find_meteors
In [2]: find_meteors.calc_dist(0,0,5,5)
Out[2]: 785.9892238241357
if __name__ == '__main__':
아래 블록이 없으면
`from meteors import find_meteors` 명령어 실행시 코드 맨 마지막 줄 `print(meteor_data[0:10])` 에 의해 화면에 데이터가 출력된다.
import 할 때에는 로직이 실행되지 않게 하기 위해 위에 조건문을 추가하며,
아래와 같이 실행시에는 `print(meteor_data[0:10])` 구문이 정상적으로 출력된다.
`pipenv run python meteors/find_meteors.py`
반응형
댓글