-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)

通常、関数をこのように設計することはお勧めできません。リスト (イテラブル) 用と文字列用の 2 つの異なる関数を作成することをお勧めします。

于 2013-04-28T08:53:37.790 に答える
0

pythonic の方法は、常に 1 行にできるだけ近づけます。

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 に答える