如何将不同的金额添加到一个输入变量?
How do I add different amounts to one inputted variable?
我目前有一个嵌套列表,其中包含名称、距太阳的最长和最短距离,以及这些行星距 01/01/16 的时间范围(以周为单位)。该变量是用户输入的周数,但是因为默认情况下所有行星最初都在“-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],
]
这目前工作正常,但我正在尝试创建一个包含所有变量(其中将包括用户的 "week" 输入)的主函数,然后将常量分开。这让我想到了如上所示在没有变量的情况下定义行星的问题。我不明白如何在行星定义中只有“+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)
在这种情况下您可以做的是定义一个函数,该函数将通过闭包存储每个行星的输入数据并计算适当的值:
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
我目前有一个嵌套列表,其中包含名称、距太阳的最长和最短距离,以及这些行星距 01/01/16 的时间范围(以周为单位)。该变量是用户输入的周数,但是因为默认情况下所有行星最初都在“-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],
]
这目前工作正常,但我正在尝试创建一个包含所有变量(其中将包括用户的 "week" 输入)的主函数,然后将常量分开。这让我想到了如上所示在没有变量的情况下定义行星的问题。我不明白如何在行星定义中只有“+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)
在这种情况下您可以做的是定义一个函数,该函数将通过闭包存储每个行星的输入数据并计算适当的值:
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