Python 使用输入()列出的编号

Python 使用输入()列出的编号,python,list,input,numbers,Python,List,Input,Numbers,也许这是一个非常基本的问题,但我是python的初学者,找不到任何解决方案。我当时正在写一个python脚本,因为无法有效地使用python列表而陷入困境。我希望用户输入一个或多个数字,并将它们作为整数存储在python列表中。例如,用户可以输入单个数字1或由逗号1、2、3分隔的多个数字,我想将它们保存到整数列表中。 我试过这个 def inputnumber(): number =[] num = input(); number.append(num) numb

也许这是一个非常基本的问题,但我是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'
我在stackoverflow中找到了一些东西,但无法使其工作 我在windows中使用python 2.5

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

这里不是输入的方式-它将输入作为python代码进行计算。使用原始输入,它返回一个字符串。所以你想要的是:

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答案的一个冗长版本。

这里的方法不是输入,而是将输入作为python代码进行计算。使用原始输入,它返回一个字符串。所以你想要的是:

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答案的冗长版本。

在你的函数中,你可以通过调用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可以替换为列表理解,您也可以去掉中间变量号并返回理解结果,如果您希望保留该值,同样适用于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()]

在函数中,您可以通过调用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可以替换为列表理解,您也可以去掉中间变量号并返回理解结果,如果您希望保留该值,同样适用于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()]

但是,如果输入是单个数字,则会出现一个错误:代码类型错误:“int”对象不是iterableI编辑的我的答案-它现在应该可以工作了-1:您正确地建议不要使用输入,因为它对输入进行求值,然后使用eval对输入进行求值。因此,这与直接使用输入一样不安全。@Blair是的,我会更改它,尽管Rocket的答案可能会更好。您最初的解决方案是一种巧妙的处理方法-您可以通过使用ast模块中的literal_eval函数绕过eval的陷阱,尽管经过仔细考虑,如果有人输入一个单词而不是一个数字,那么这将不起作用,所以请忽略我:。但是如果输入是单个数字,则会出现错误:code TypeError:“int”对象不是iterableI编辑了我的答案-它现在应该起作用了-1:您正确地建议不要使用输入,因为它会计算输入,然后使用eval对输入进行评估。因此,这与直接使用输入一样不安全。@Blair是的,我会更改它,尽管Rocket的答案可能会更好。您最初的解决方案是一种巧妙的处理方法-您可以通过使用ast模块中的literal_eval函数绕过eval的陷阱,尽管经过仔细考虑,如果有人输入的是一个单词而不是一个数字,那么这就行不通了
Don’别不理我。非常感谢你。很好用。@Geomatics一点问题都没有,很高兴它能帮上忙:对不起,刚才注意到你编辑的关于处理其他单词的内容-我也会把它放进去。非常感谢你。它可以工作。@Geomatics一点问题都没有,很高兴它能帮上忙:抱歉,刚才注意到你编辑的关于处理其他单词的内容-我也会把它放进去。