2013-06-05 55 views
-1
def Sum(*args): 
    Len=0 
    n=0 
    for(i)in(args): 
    if isinstance(args[n],int)==True: 
     Len+=args[n] 
    elif isinstance(args[n],dict)==True: 
     for Key in args[n]: 
     Len+=args[n][Key] 
    else: 
     for(i)in(args[n]): 
     Len+=i 
    n+=1 
    return(Len) 
def Bin(*args): 
    return Sum(args) 
T=7 
L={"l":83,"k":33} 
M=[22,99,8] 
print Sum(T,L,M) 
print Bin(T,L,M) 

這是我的代碼,第一個函數可以工作,但第二個並不是因爲當它在第二個函數中被調用時,它會對它進行元組化,即使它已經是一個元組,因此它在運行時不工作因爲你認爲它的縮進問題我縮進2個空格)在Python中如何工作?

+3

在'Bin'功能,您應該返回'Sum(* args)'而不是'Sum(args)'。 – wwww

+0

@Ant我認爲他只是想看看爲什麼它不工作,他看起來當然是在試驗 – TehTris

+0

..只是陳述一個事實:-) – Ant

回答

2

你想從Binreturn Sum(*args)。問題在於你傳遞了一個tupleSum,它被Sum中的單個元素(這是另一個元組)解開成一個元組。例如如果你print args裏面Sum,你會看到類似:

((T,L,M),) 

代替:

(T,L,M) 
+0

是的,我有程序打印它所做的參數((T, L,M),)即時嘗試看看爲什麼它在一個函數中調用時,並感謝ColdFusion我必須忘記鍵入 – user1875892

0

我不知道你想要做什麼,但這裏是最小的一個線修復實際上使代碼的運行(第二內部for循環迭代現在args來長度[n])的:

def Sum(*args): 
    Len=0 
    n=0 
    for(i)in(args): 
    if isinstance(args[n],int)==True: 
     Len+=args[n] 
    elif isinstance(args[n],dict)==True: 
     for Key in args[n]: 
     Len+=args[n][Key] 
    else: 
     for(i)in range(len(args[n])): 
     Len+=i 
    n+=1 
    return(Len) 
def Bin(*args): 
    return Sum(args) 
T=7 
L={"l":83,"k":33} 
M=[22,99,8] 
print Sum(T,L,M) 
print Bin(T,L,M) 

的輸出是:

126 
3 

當發佈的代碼具有適量的空行以便其他人可以簡單地將代碼粘貼到Python >>>提示符中時,我發現它很好。包括Python 3一致性和其他文體的變化,這裏就是我的意思:

def Sum(*args): 
    Len = 0 
    n = 0 
    for i in args: 
     if isinstance(args[n], int): 
      Len += args[n] 
     elif isinstance(args[n], dict): 
      for Key in args[n]: 
       Len += args[n][Key] 
     else: 
      for i in range(len(args[n])): 
       Len += i 
     n += 1 
    return Len 

def Bin(*args): 
    return Sum(args) 

T = 7 
L = {"l":83,"k":33} 
M = [22,99,8] 

print(Sum(T,L,M)) 
print(Bin(T,L,M)) 
0

這裏添加東西的一個更Python的方式:

#!/usr/bin/env python2 
import numbers 

def SumRec(arg): 
    if isinstance(arg, numbers.Number): 
     return arg 
    elif isinstance(arg, dict): 
     return sum(SumRec(value) for value in arg.itervalues()) 
    else: 
     return sum(SumRec(thing) for thing in arg) 
def Sum(*args): 
    return sum(SumRec(arg) for arg in args) 

T = 7 
L = {"l": 83, "k": 33} 
M = [22, 99, 8] 
print Sum(T,L,M) 
print Sum([T,L,M]) 
print SumRec([T,L,M]) 
print 7 + (83 + 33) + (22 + 99 + 8)