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。出于某种原因,它没有计算高度和方位角。想法?

编辑

return loc()在第 14 行添加。

我正在做更多的阅读,其他一些线程说要到达内部函数,它需要在父函数的末尾返回。但是,它仍然不适合我。

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.raplanet.dec定位背景星座,而不是打印它在天空中的坐标。我所做的只是在最后添加返回调用以打印高度和方位角数据。

于 2013-10-09T14:35:16.290 回答