-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番目の関数で呼び出されると、すでにタプルであるにもかかわらずタプルになるため、実行時に機能しないため、2番目の関数は機能しません(インデントが考えられる場合)問題私は2つのスペースでインデントします)

4

3 に答える 3

2

return Sum(*args)からしたいBin。問題は、単一の要素 (別のタプル) を持つタプルにアンパックされる を にtuple渡していることです。たとえば、の中にいる場合は、次のように表示されます。SumSumprint argsSum

((T,L,M),)

それ以外の:

(T,L,M)
于 2013-06-05T17:31:14.810 に答える
0

何をしようとしているのかわかりませんが、実際にコードを実行するための最小限の 1 行の修正を次に示します (2 番目の内側の 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))
于 2013-06-05T18:38:54.453 に答える
0

これは、物事を追加するためのより Pythonic な方法です。

#!/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)
于 2013-06-05T19:04:59.017 に答える