【问题标题】:How do I add different amounts to one inputted variable?如何向一个输入变量添加不同的数量?
【发布时间】:2016-04-27 03:35:13
【问题描述】:

我目前有一个嵌套列表,其中包含名称、距太阳的最长和最短距离以及这些行星距 16 年 1 月 1 日的时间范围(以周为单位)。变量是用户输入的周数,但是因为默认情况下所有行星最初都从“-x”轴开始,所以我从用户时间开始有+/-必要的时间量,以便正确定位它们。

Week=int(input("How many weeks would you like to see into the Solar System's future?   "))
TimeFormat=365.25*60*60*24

PlanetData = [
    ['Mercury', 69.8, 46.0, (Week+1.5)/52 * TimeFormat],
    ['Venus', 108.9, 107.5, (Week-9)/52 * TimeFormat],
    ['Earth', 152.1, 147.1, (Week-1.5)/52 * TimeFormat],
    ['Mars', 249.2, 206.7, (Week-21)/52 * TimeFormat],
    ["Halley's Comet",5250, 87.7, (Week+1.54e3)/52 * TimeFormat],
]

目前这工作正常,但是我正在尝试创建一个包含所有变量(包括用户的“星期”输入)的主函数,然后将常量分开。这让我想到了如上所示定义行星的问题,其中没有变量。我不明白如何在行星定义中只添加“+1.5”,然后在功能部分单独添加用户输入。

下面给出了如何在函数中使用此列表的示例,但是大约有 8 个函数使用每个行星的不同信息组合。

def MapPlanet(Max, Min, Time):
    SCALE = 1e9
    theta, r = SolveOrbit(Max * SCALE, Min * SCALE, Time)
    x = -r * cos(theta) / SCALE
    y = r * sin(theta) / SCALE
    return x, y

def DrawPlanet(Name, Max, Min, Time):
    x, y = MapPlanet(Max, Min, Time)
    Planet = Circle((x, y), 8)
    plt.figure(0).add_subplot(111, aspect='equal').add_artist(Planet)
    plt.annotate(Name, xy=((x+5),y),color='red')

这将在主函数中执行,如下所示:

def Main():

    Week=int(input("How many weeks would you like to see into the Solar System's future?   "))

    for Name, Max, Min, Time in PlanetData:
        MapPlanet(Max, Min, Time)
        DrawPlanet(Name, Max, Min, Time)

【问题讨论】:

    标签: python variables main


    【解决方案1】:

    在这种情况下,您可以做的是定义一个函数,该函数将通过闭包存储每个行星的输入数据并计算适当的值:

    TimeFormat=365.25*60*60*24
    
    def planet_time(data):
        def value(Week):
            return (Week+data)/52 * TimeFormat
        return value(Week)
    

    然后您可以使用此函数来定义每个行星(下面的代码是您的代码的简化版本,但 PlanetData 是完整的):

    Week = 4
    
    PlanetData = [
        ['Mercury', 69.8, 46.0, planet_time(1.5)],
        ['Venus', 108.9, 107.5, planet_time(-9.0)],
        ['Earth', 152.1, 147.1, planet_time(-1.5)],
        ['Mars', 249.2, 206.7, planet_time(21.0)],
        ["Halley's Comet",5250, 87.7, planet_time(1.54e3)],
    ]
    
    for Name, Max, Min, Time in PlanetData:
        print("{}, {}".format(Name, Time))
    

    此代码打印:

    Mercury, 3337823.07692                                                                                                                                                                                                                                 
    Venus, -3034384.61538                                                                                                                                                                                                                                  
    Earth, 1517192.30769                                                                                                                                                                                                                                   
    Mars, 15171923.0769                                                                                                                                                                                                                                    
    Halley's Comet, 937017969.231
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多