也许这是一个非常基本的问题,但我是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/