在功能中无法使用pyephem打印alt和az

时间:2013-10-09 05:16:39

标签: python pyephem

我正在为一个类创建一个简单的python程序,该类将在Raspberry Pi和Arduino上运行以指示望远镜。我不久前开始学习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()

我正在做更多阅读,其他一些线程说要进入内部函数,它需要在父进程结束时返回。但是,它仍然不适合我。

2 个答案:

答案 0 :(得分: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: '))

答案 1 :(得分: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.raplanet.dec来定位背景星座,而不是在天空中打印它的坐标。我所做的就是在结尾处添加返回呼叫以打印高度和方位角数据。