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

2 python numbers input list

也许这是一个非常基本的问题,但我是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
Run Code Online (Sandbox Code Playgroud)

对于单个数字没有问题,但如果输入类似于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'
Run Code Online (Sandbox Code Playgroud)

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

>>>[1,2,3]
Run Code Online (Sandbox Code Playgroud)

我在stackoverflow中找到了这个Mark Byers的答案但是无法使它在Windows中使用python 2.5.

对不起我的英语不好.非常感谢你的帮助.

Roc*_*key 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']
Run Code Online (Sandbox Code Playgroud)

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

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

x = inputnumber()
print x
Run Code Online (Sandbox Code Playgroud)

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

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

x = inputnumber()
print x
Run Code Online (Sandbox Code Playgroud)

如果要处理其他类型的输入而不出错,可以使用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
Run Code Online (Sandbox Code Playgroud)

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

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

print [int(n) for n in raw_input('Number(s): ').split(',') if n.isdigit()]
Run Code Online (Sandbox Code Playgroud)