1

私は、ユーザーが惑星または月の名前を渡す小さな pyephem プログラムを作成しており、プログラムはそれについていくつかの計算を行います。星 (ephem.star('Arcturus')) でできるように、名前で惑星または月を検索する方法が見つからなかったため、現在、私のプログラムには惑星と月の名前のルックアップ テーブルがあります。ピエフェムはこれを行うことができますか?そうでない場合、追加する価値はありますか?

4

3 に答える 3

2

興味深い質問です!基になるオブジェクトがサポートされているオブジェクトを自分自身_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')]

これら 3 つの項目の最後の項目のみが必要なため、次のような名前のリストを作成できます。

>>> 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']

name次に、簡単なgetattr(ephem, name)呼び出しで、その を指定して、これらのオブジェクトのいずれかを取得できます。

于 2014-02-17T21:57:33.310 に答える
0

ここでチュートリアルを見つけることができます。

例えば:

>>> 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')

あなたはそこでもっと多くの詳細を見つけることができると思います。

于 2014-02-16T14:34:53.547 に答える