1

这是我在 python 3.2.3 IDLE 上的代码:

numbers = []
numbers = input("(Enter a empty string to quit) Enter a number: ")
while numbers != "":
    numbers = input("(Enter a empty string to quit) Enter a number; ")
numbers.append(n)
print ("The list is", numbers)

现在的问题是,我无法附加列表。如果我让 numbers = int(input( 那么它适用于附加列表,但不会让我退出输入数字。如果我让 numbers = input 像我现在一样,它不会让我附加列表

我怎样才能让这些数字附加到列表中?

4

2 回答 2

9

有两个问题:

  1. 您将输入分配给numbers而不是n;
  2. append()是在错误的地方。

尝试以下操作:

numbers = []
n = input("(Enter a empty string to quit) Enter a number: ")
while n != "":
    numbers.append(n)
    n = input("(Enter a empty string to quit) Enter a number; ")
print ("The list is", numbers)

如果要存储整数而不是字符串,请将append()行更改为:

    numbers.append(int(n))

从风格上讲,如果第一个提示与所有后续输入的提示相同,我将重组代码如下:

numbers = []
while True:
    n = input("(Enter a empty string to quit) Enter a number: ")
    if n == "": break
    numbers.append(n) # or int(n)
print ("The list is", numbers)
于 2012-12-04T15:10:01.947 回答
2

尽管您已经找到了答案,但对于简单的数据输入,这可以大大简化:

numbers = list(map(int, iter(input, '')))

由内而外工作(有点解释):

  • iter(input, '')重复调用,直到''满足(空输入)并且yields该值
  • 获取map(int,...)这些值并尝试转换为整数 - 如果不能,则会引发异常
  • list(...)然后接受它并创建一个实际的list对象
  • numbers = ...是错误的,正如它所说:)

然后,可能包装在一个函数中(functools.partial在这里使用,但 lambda 很好):

def ask(prompt):
    from functools import partial
    prompt_func = partial(input, prompt)
    return list(map(int, iter(prompt_func, '')))

numbers = ask('Keep entering valid numbers (or a blank line to quit)')
于 2012-12-04T15:15:40.200 回答