-2

我们有一个函数可以允许用户输入整数/字符串格式/列表格式

   def testsum(data):
        if(type(data)==type(1)):
            data=map(int,str(data))

        for i in map(int,data):
            #print(type(i))
            print(i,i+20)

    if __name__=="__main__":
        testsum(1)#OK
        testsum([2,3,4])#OK
        testsum("123")#FAILS,we hope to be 143
        testsum(['5','6'])#OK
4

2 回答 2

3

我猜你正在寻找类似的东西:

def testsum(data):
    if not isinstance(data, list):
        data = [data]

    for i in map(int,data):
        print(i,i+20)

请注意,像这样设计函数通常不是一个好主意。最好编写两个不同的函数,一个用于列表(可迭代),一个用于字符串。

于 2013-04-28T08:53:37.790 回答
0

pythonic方式总是尽可能接近一行。

testsum = lambda data: data if isinstance(data,int) else sum([v*10**(len(data)-i) for i,v in enumerate(map(int,data),1)])

print(testsum(1))
print(testsum([2,3,4]))
print(testsum("123"))
print(testsum(['5','6']))

或单线:

def testsum(data):
    if isinstance(data,int):
        return data
    else:
        return sum([v*10**(len(data)-i) for i,v in enumerate(map(int,data),1)])

输出:

1
234
123
56
于 2013-04-28T09:20:08.567 回答