根据用户输入生成原始输入?[Python]

根据用户输入生成原始输入?[Python],python,raw-input,Python,Raw Input,有没有办法根据用户输入生成大量原始输入(具有唯一变量)?那么,假设我有这个: if choice == 1: noelemen = int(raw_input("Enter total amount of elements: ")) 有没有办法使输入到原始输入字段中的整数“生成”所需的原始输入量?我想,如果可能的话,它会使用函数或类似的东西,但我有点困惑,我如何才能做到这一点 我目前拥有的是: if noelemen == 1: first = raw_input("E

有没有办法根据用户输入生成大量原始输入(具有唯一变量)?那么,假设我有这个:

if choice == 1:
    noelemen = int(raw_input("Enter total amount of elements: "))
有没有办法使输入到原始输入字段中的整数“生成”所需的原始输入量?我想,如果可能的话,它会使用函数或类似的东西,但我有点困惑,我如何才能做到这一点

我目前拥有的是:

if noelemen == 1:
        first = raw_input("Enter element: ")

        #Look for the weight of the entered element
        weight1 = float(elemen_data.get(first.lower()))

        if weight1 is not None:
            total_weight = weight1
        print "Total mass =", total_weight

if  noelemen == 2:
        first = raw_input("Enter first element: ")
        second = raw_input("Enter second element: ")

        #Look for the weight of the entered element
        weight1 = float(elemen_data.get(first.lower()))
        weight2 = float(elemen_data.get(second.lower()))

        if weight1 is not None:
            total_weight = weight1 + weight2
        print "Total mass =", total_weight
这可能是一个相当混乱的方法,尤其是当我不得不增加到大约10个元素,或者甚至更多


所以,重复一下。。。有没有办法根据用户输入生成具有唯一变量的原始输入?

我会为此使用字典:

noelemen = int(raw_input("Enter total amount of elements: "))
elem={}
for x in xrange(1,noelemen+1):
    elem[x]=raw_input("Enter element: ")

像这样的怎么样

elements = []
numberOfPrompts = raw_input("Enter total amount of elements: ")
for i in range(numberOfPrompts):
   # will prompt "Enter Element 1: " on the first iteration
   userInput = raw_input("Enter Element %s" % (i+1, )) 
   elements.append(userInput)
示例案例: 此时,变量
numberOfPrompts
的值将为
2
。 变量
元素
的值将为
[]
,即它是一个空列表

>>> Enter Element 1: 3.1415 # hit enter
numberOfPrompts
保持
2
元素
将是
['3.1415']

>>> Enter Element 2: 2.7182
元素
将是
['3.1415','2.7182']

现在for循环完成了,您可以在0索引列表
元素中方便地获得用户输入,您可以像元组(数组)一样访问这些元素:


编辑: 读了你的评论后,我注意到你打算做什么,就像另一个答案所说的那样,最好用字典来解释。这应该起作用:

elements = {}
numberOfPrompts = raw_input("Enter total amount of elements: ")
for i in range(numberOfPrompts):
   # will prompt "Enter Element 1: " on the first iteration
   userInput = raw_input("Enter Element %s" % (i+1, )) 
   userInput = userInput.lower()
   elements[userInput] = float(elem_data.get(userInput))
现在,
元素
将如下所示:

{'oxygen':15.9994, 'hydrogen':1.0079}
weightSum = 0
for weight in elements.values():
    weightSum += weight
print weightSum
# output:
17,0073
您可以像这样迭代所有键(找出输入了哪些元素):

要获取所有值(例如,求和),请执行以下操作:

{'oxygen':15.9994, 'hydrogen':1.0079}
weightSum = 0
for weight in elements.values():
    weightSum += weight
print weightSum
# output:
17,0073

请记住,这个示例是针对Python2.x的。对于Python3.x,您需要调整几件事。

IMO,问题需要的是一个列表,而不是一个带有整数键的dict。等等,这会为生成的每个原始输入分配一个唯一的变量吗?目前它似乎只是覆盖了以前输入的每个元素。。。不过,我的查找可能有问题。您将有一个列表
elements
,其中按顺序包含
numberOfPrompts
元素。我唯一的问题是这样设置:(这是实际打印值的唯一方式)最终只给出最后输入的元素的权重。其他人会抛出各种各样的错误,比如AttributeErrors之类的错误。那么,我想我们在不同的页面上。我有一个CSV文件,我正在从中导入元素名称和元素权重,因此当您键入例如Oxygen时,它将在CSV中搜索它并返回15.9994(精确,我知道)。如果你在一个字段中输入氧气,然后在下一个字段中输入氢气,它将取这两个字段,查找权重,然后将它们相加。这类东西。
userInput
包含一个整数。对其调用
.lower()
将导致python抛出错误,因为该对象上没有名为
.lower()
的(内置)方法。它在您以前的代码中起作用,因为您使用
原始输入
直接从控制台读取用户输入,它会向您返回一个字符串。查看我的扩展答案,了解如何获得自己的价值观。
weightSum = 0
for weight in elements.values():
    weightSum += weight
print weightSum
# output:
17,0073