0

私は、望遠鏡を向けるためにRaspberry PiとArduinoで実行されるクラス用の単純なpythonプログラムの構築に取り組んでいます。しばらく前に Python の学習を始めたのですが、関数を正しく動作させるのに問題があります。今、私はこれを持っています:

import ephem

def const(p, d): # find the constellation #
    def loc():
        sbend = ephem.Observer()
        sbend.lat = '41.67'
        sbend.lon = '86.26'
        p = getattr(ephem, p)
        p.compute(sbend)
        print p.alt, p.az

    o = getattr(ephem, p)
    print ephem.constellation(o(d))
    return loc()

const(raw_input('Planet: '), raw_input('yyyy/mm/dd: '))

私が覚えていることから、別の関数内の関数は親から変数を呼び出すことができます。私が最後に持っているように、逆の方法でも機能しますか? ハードコードされた場所に基づいて、星座(機能している)と惑星のaltとazを印刷できるようにしたいと思います。何らかの理由で、高度と方位を計算していません。考え?

編集

14行目に追加return loc()しました。

私はより多くの読書をしていましたが、他のいくつかのスレッドは、内部関数に到達するには、親の最後に返す必要があると言っていました。しかし、それはまだ私にとってはうまくいきません。

4

2 に答える 2

1

ある関数が別の関数の中にある理由がはっきりしないので、解決しようとしている問題の一部が欠けている可能性があります。しかし、惑星がどの星座にあるのか、惑星の名前と日付が入力として提供されている場所を特定したい場合は、関数内の複雑な関数を使用せずに、これらの手順をすべて連続して実行するだけです。

import ephem

def const(planet_name, date_string):
    planet_class = getattr(ephem, planet_name)
    planet = planet_class()
    south_bend = ephem.Observer()
    south_bend.lat = '41.67'
    south_bend.lon = '-86.26'  # west is negative
    south_bend.date = date_string
    planet.compute(south_bend)
    return ephem.constellation((planet.ra, planet.dec))

print const(raw_input('Planet: '), raw_input('yyyy/mm/dd: '))
于 2013-10-09T13:31:52.220 に答える
0

@Brandon の例を使用すると、最終的なコードは次のようになります。

import ephem

def const(planet_name, date_string): 
    planet_class = getattr(ephem, planet_name) 
    planet = planet_class() 
    south_bend = ephem.Observer()
    south_bend.lat = '41.67'
    south_bend.lon = '-86.26'
    south_bend.date = date_string              
    planet.compute(south_bend)                  
    print ephem.constellation((planet.ra, planet.dec))
    return planet.alt, planet.az

print const(raw_input('Planet: '), raw_input('yyyy/mm/dd: '))

私はそれを見て、彼が空の座標を印刷するためではなく、背景の星座を見つけるために使用planet.raしていることに気付きました。planet.dec私がしたことは、高度と方位角のデータを出力するために最後に return 呼び出しを追加することだけでした。

于 2013-10-09T14:35:16.290 に答える