使用 Python 2.7.5 解决宇宙学中的任务

Solving a task in cosmology using Python 2.7.5

我正在寻找一段代码,它接受用户输入的红移列表(即数字),用空格分隔并一次完成,然后自动将它们分配给变量,如 a、b、c ,d.....m,n,o.

例如,如果用户输入“0.32 0.53 0.77 0.91 1.1 1.4”,则程序应将 0.32 分配给变量 a,将 0.53 分配给变量 b,将 0.77 分配给变量 c,依此类推。我不希望用户输入超过 10 个数字。

据我所知,我一直在尝试为此使用 raw_input 函数,但迄今为止没有成功。

接下来,我打算使用简单的公式 A=3800/(1+a) 来找到红移 "a" 的物体在光学范围内发出的最短静止帧波长,然后重复这个过程适用于用户给出红移的所有其他天体。然而,这部分应该没有问题。我真正的绊脚石如上所述。

假设您使用 raw_input():

从用户那里得到了一个字符串
astr = raw_input('Input: ')

然后,有很多方法可以处理这个问题。但最简单的可能是将该字符串拆分为一个列表:

alist = astr.split(' ') # returns ['0.32', '0.53', '0.77', '0.91', '1.1', '1.4']

由于您可能希望它们是浮点数而不是字符串,因此您可以使用列表理解:

alist = [float(val) for val in astr.split(' ')] # returns [0.32, 0.53, 0.77, 0.91, 1.1, 1.4]

你也可以把它都放在字典里:

dic = {j:float(val) for j, val in enumerate(astr.split(' '))}

如果你想用字母来命名并且你确定少于26个,你可以这样做:

from string import ascii_lowercase as letters
dic = {letters[j]:float(val) for j, val in enumerate(astr.split(' '))}

最后,您可以使用 exec,但这是非常糟糕的形式,我不推荐它。