python - 使用 input() 列出的数字

标签 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]

我发现了这个Mark Byers's answer在 stackoverflow 但无法使其工作 我在 Windows 中使用 python 2.5。

抱歉我的英语不好。非常感谢您的帮助。

最佳答案

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

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 block (并处理 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()]

关于python - 使用 input() 列出的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14177582/

相关文章:

python - 在 python 中绘制二进制数据

c++ - int C++ 的输入验证

java - 将图像从小端转换为大端

python - 添加标签/类别以通过python交换电子邮件

python - 在 for 循环中访问过去的日期时间

python - 将列插入 Pandas 数据框

python - 为什么此代码会更改两个列表(id 不相同)?

python - 如何从Python中的递归函数内部增长并返回列表

javascript - 我有一个输入类型文件列表,它仅接受图像..添加图像时如何查看图像?

javascript - 如何根据输入 aria-valuenow 中以编程方式更改的数据添加类