<p>只要输入包含空格,这个程序就不应该抛出<code>IndexError</code>。
如果您的输入不包含空格,按<code>' '</code>拆分将创建一个长度为1的列表,其中包含整个输入字符串,如果您尝试访问索引<code>1</code>处的元素,则会导致<code>IndexError</code>。你知道吗</p>
<p>解决方法是将每个变量分配给它自己的<code>input</code>:</p>
<pre><code>var_name = input("Var name: ")
amount = float(input("Amount: "))
</code></pre>
<p>但是,在当前形式下,代码将在下一行抛出<code>TypeError</code>:</p>
<pre><code>TypeError: can only concatenate list (not "float") to list
</code></pre>
<p>您需要将<code>amount</code>变量转换为要连接的列表。可以使用方括号执行此操作:</p>
<pre><code>List = List + [newVar[0]]
</code></pre>
<p>虽然现在可以这样做了,但是当您想将名称与存储在列表中的值相关联时,您可能需要使用<a href="https://docs.python.org/3/tutorial/datastructures.html#dictionaries" rel="nofollow noreferrer">^{<cd8>}</a>。这允许您访问存储值的名称,而不是使用<a href="https://docs.python.org/3/library/stdtypes.html#dict.keys" rel="nofollow noreferrer">^{<cd9>}</a>在输出字符串中硬编码它们</p>
<p>但是,您需要检查,如果用户选择添加到新名称,它是否已经不是字典中的键,因为先前的值将被覆盖。你知道吗</p>
<p>该计划的起点可以如下所示:</p>
<pre><code>List = {"A" : 0.00,
"B" : 0.00,
"C": 0.00}
while True:
names = List.keys()
Var = input("Add to {} or add new variable (100): ".format(", ".join(names)))
if Var in names:
amount = float(input("Amount: "))
List[Var] += amount
elif Var == "100":
var_name = input("Var name: ")
if var_name not in List:
amount = float(input("Amount: "))
List[var_name] = amount
else:
print("That name is already in use.")
else:
pass
</code></pre>
<p>尽管你可能不想给你的字典命名<code>List</code>。你知道吗</p>