使用input()列出的数字/数字

时间:2013-01-05 23:31:02

标签: python list input numbers

也许这是一个非常基本的问题,但我是python的初学者,无法找到任何解决方案。我正在编写一个python脚本并被卡住,因为我无法使用python列表有效。我希望用户输入(数字或数字)并将它们作为整数存储在python列表中。例如,用户可以输入单个数字1或由逗号1,2,3分隔的多个数字,我想将它们保存为整数列表。 我试过这个;

def inputnumber():
    number =[]
    num = input();
    number.append(num)
    number = map(int,number)
return (number)
def main():
    x = inputnumber()
print x

对于单个数字没有问题,但如果输入类似于1,2,3则会出错:

Traceback (most recent call last):
File "test.py", line 26, in <module>
main()
File "test.py", line 21, in main
x = inputnumber()
File "test.py", line 16, in inputnumber
number = map(int,number)
TypeError: int() argument must be a string or a number, not 'tuple'

此外,我必须考虑到用户也可以输入字符而不是数字。我必须过滤这个。如果用户输入单个字符的单词。我知道我必须使用try:except。但无法处理。我搜索了stackoverflow和互联网,但在我发现用户想要输入的例子中就像是;

>>>[1,2,3]

我在stackoverflow中找到了这个Mark Byers's answer,但无法使其正常工作 我在windows中使用python 2.5。

抱歉我的英文。非常感谢你的帮助。

2 个答案:

答案 0 :(得分:5)

在您的函数中,您可以通过调用num直接将split(',')转换为列表,这将在逗号上分割 - 如果逗号不存在,您只需获得一个 - 元素清单。例如:

In [1]: num = '1'

In [2]: num.split(',')
Out[2]: ['1']

In [3]: num = '1,2,3,4'

In [4]: num.split(',')
Out[4]: ['1', '2', '3', '4']

然后您可以使用您的功能:

def inputnumber():
    num = raw_input('Enter number(s): ').split(',')
    number = map(int,num)
    return number

x = inputnumber()
print x

但是如果你愿意的话,你可以更进一步 - map这里可以用列表理解代替,你也可以去掉中间变量number并返回结果理解(同样适用于map,如果你想保留它:)

def inputnumber():
    num = raw_input('Enter number(s): ').split(',')
    return [int(n) for n in num]

x = inputnumber()
print x

如果您想要无错误地处理其他类型的输入,可以使用try/except块(并处理ValueError异常),或者使用字符串上的一种有趣方法来检查是否数字是一个数字:

def inputnumber():
    num = raw_input('Enter number(s): ').split(',')
    return [int(n) for n in num if n.isdigit()]

x = inputnumber()
print x

这显示了列表理解的一些强大功能 - 这里我们说'将此值转换为整数,但仅限于它是一个数字(即if n.isdigit()部分)。

正如你可能已经猜到的那样,你可以通过彻底摆脱这个功能并将它变成一个单行(这是Python的一个令人敬畏/棘手的功能 - 将其缩小到单行 - 这简直容易崩溃,但在某些情况下会导致代码不太可读,所以我投票支持你的方法:)):

print [int(n) for n in raw_input('Number(s): ').split(',') if n.isdigit()]

答案 1 :(得分:-1)

input不是这里的方法 - 它将输入评估为python代码。请改用raw_input,它返回一个字符串。所以你想要的是:

def inputnumber():
    num = raw_input()
    for i, j in enumerate(num):
        if j not in ', ':
            try:
                int(num[i])
            except ValueError:
                #error handling goes here
    return num

def main():
    x = inputnumber()
    print x

我想这一切都是RocketDonkey答案的冗长版本。