-2

単一の乗馬の承認投票を表す 4 要素リストのリストであるパラメーターを取る関数を作成しようとしています。内側のリスト要素の順序は、 と呼ばれるパーティのリスト内のパーティの順序に対応しPARTY_INDICESます。

「賛成」票の多い党が勝利。

最初の要素が勝者の名前で、2 番目の要素が各党の賛成票の数を含む 4 要素のリストである 2 タプルを返す必要があります。リスト要素の順序は、 の関係者の順序に対応していPARTY_INDICESます。

これは私がこれまでに持っているものです:

def voting_approval(approval):
    ''' (list of list of str) -> tuple of (str, list of int)
        In Approval Voting, the party that receives the most YES votes wins the seat.
    '''

    parties=['NDP','GREEN','LIBERAL','CPC']
    totals = [sum('YES') for x in zip(*approval)]
    win_party = parties[totals.index(max(totals))]
    return (win_party, totals)

しかし、私がしようとするとvoting_approval(['YES','NO','YES','NO'],['YES','NO','YES','YES'],['YES','YES','YES','YES'])

次のエラーが表示されます。

builtins.TypeError: voting_approval() takes exactly 1 positional argument (3 given)
4

2 に答える 2

0

関数のトラブルシューティングを試みないと、エラーの理由は、1 つのパラメーターしかとらない関数に引数として 3 つのリストを渡していることです。

関数にアプローチする別の方法は次のとおりです。

def vote(arg):
    parties = ['NDP','GREEN','LIBERAL','CPC']
    values = [0,0,0,0]
    for lis in arg:
        for no, item in enumerate(lis):
            if item == 'Yes':
                values[no] += 1

    return (parties[values.index(max(values))], max(values))

次に、次のように使用します。

vote([['Yes', 'No', 'Yes', 'No'],['No', 'No', 'Yes', 'No']])

これは ('LIBERAL', 2) を返します

于 2012-11-30T01:42:18.217 に答える
0

「はい」票の数を数えて、あなたの主な問題と思われるものを解決します。

party_list = ['foo','bar','zoo']
yes_votes = {}
sample_votes = [['no','yes','no'],['yes','yes','no'],['no','no','no']]

for inner_list in sample_votes:
   for party_index, vote in enumerate(inner_list):
      if vote.lower() == 'yes':
          if party_list[party_index] not in yes_votes:
              yes_votes[party_list[party_index]] = 1
          else:
              yes_votes[party_list[party_index]] += 1

print 'Winner is ',max(yes_votes, key=lambda x: yes_votes[x])
于 2012-11-30T02:14:25.540 に答える