[英]look up planet or moon by name in pyephem?
我正在編寫一個小的pyephem程序,用戶以行星或月球的名字傳遞該程序,然后對該程序進行一些計算。 我找不到如何按名稱查找行星或月球的方法,就像您可以使用恆星(ephem.star('Arcturus'))一樣,因此我的程序當前有一個查找行星和月球名稱的表。 pyephem可以這樣做嗎? 如果沒有,是否值得添加?
一個有趣的問題! 確實存在一個內部方法,底層_libastro
用來告訴ephem
本身支持哪些對象:
import ephem
from pprint import pprint
pprint(ephem._libastro.builtin_planets())
哪些打印:
[(0, 'Planet', 'Mercury'),
(1, 'Planet', 'Venus'),
(2, 'Planet', 'Mars'),
(3, 'Planet', 'Jupiter'),
(4, 'Planet', 'Saturn'),
(5, 'Planet', 'Uranus'),
(6, 'Planet', 'Neptune'),
(7, 'Planet', 'Pluto'),
(8, 'Planet', 'Sun'),
(9, 'Planet', 'Moon'),
(10, 'PlanetMoon', 'Phobos'),
(11, 'PlanetMoon', 'Deimos'),
(12, 'PlanetMoon', 'Io'),
(13, 'PlanetMoon', 'Europa'),
(14, 'PlanetMoon', 'Ganymede'),
(15, 'PlanetMoon', 'Callisto'),
(16, 'PlanetMoon', 'Mimas'),
(17, 'PlanetMoon', 'Enceladus'),
(18, 'PlanetMoon', 'Tethys'),
(19, 'PlanetMoon', 'Dione'),
(20, 'PlanetMoon', 'Rhea'),
(21, 'PlanetMoon', 'Titan'),
(22, 'PlanetMoon', 'Hyperion'),
(23, 'PlanetMoon', 'Iapetus'),
(24, 'PlanetMoon', 'Ariel'),
(25, 'PlanetMoon', 'Umbriel'),
(26, 'PlanetMoon', 'Titania'),
(27, 'PlanetMoon', 'Oberon'),
(28, 'PlanetMoon', 'Miranda')]
您僅需要這三個項目中的最后一個,因此可以建立一個名稱列表,例如:
>>> pprint([name for _0, _1, name in ephem._libastro.builtin_planets()])
返回:
['Mercury',
'Venus',
'Mars',
'Jupiter',
'Saturn',
'Uranus',
'Neptune',
'Pluto',
'Sun',
'Moon',
'Phobos',
'Deimos',
'Io',
'Europa',
'Ganymede',
'Callisto',
'Mimas',
'Enceladus',
'Tethys',
'Dione',
'Rhea',
'Titan',
'Hyperion',
'Iapetus',
'Ariel',
'Umbriel',
'Titania',
'Oberon',
'Miranda']
然后,您可以通過簡單的getattr(ephem, name)
調用獲取給定name
所有這些對象。
您可以在此處找到教程。
例如:
>>> import ephem
>>> u = ephem.Uranus()
>>> u.compute('1781/3/13')
>>> print u.ra, u.dec, u.mag
5:35:45.28 23:32:54.1 5.6
>>> print ephem.constellation(u)
('Tau', 'Taurus')
我認為您可以在那里找到更多詳細信息。
import ephem
from ephem import *
## Planet name plus () and return
## just to show what the name must be
buscar = 'Jupiter()' + '\n'
aqui = city('Bogota')
aqui.date = now() - 5/24 ## Substract the time zone hours from UTC
if buscar[-3:-1] == '()': ## Delete unwanted chars
astro = buscar[:-3]
cuerpo = getattr(ephem, astro)() ## YOUR ANSWER
## Body test
cuerpo.compute(aqui)
print(aqui.name, aqui.date)
print(cuerpo.name, cuerpo.az, cuerpo.alt)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.