2

也许这是一个非常基本的问题,但我是 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 的答案,但无法让它工作我在 Windows 中使用 python 2.5。

对不起我的英语不好。非常感谢您的帮助。

4

2 回答 2

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()]
于 2013-01-05T23:45:20.420 回答
-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答案的冗长版本。

于 2013-01-05T23:35:35.663 回答