多数決に基づくシステムで勝者を選択する関数を作成しています。過半数がない場合は、投票数が最も少ない選択肢を削除し、投票数が過半数の勝者が出るまで続行する必要があります。例えば、
voting({'a':12, 'b':9, 'd':4})
この場合、'a'
は 12 票、'b'
9票、 'd'
4票です。'a'
は過半数 (12/25 票) を持っていないため'd'
、利用可能な選択肢から削除する必要があり、過半数 (12/21) になります。各「投票」には任意の数の選択肢がありますが、重要なのはそれぞれの番号の 1 つだけです。
私のコードは次のdef voting(votes)
とおりです。
d = {}
winning_party = ''
i = 0
for key in votes.keys():
d[key] = votes[key]
while winning_party == '':
for key, vote in d.items():
if d[key] > 0.5 * sum(d.values()):
winning_party = key
return winning_party
else:
if d[key] == min(d.values()):
del d[key]
マイナーな変更を試みましたが、反復中に辞書のサイズが変更されたというエラーが発生するか、関数が機能しなくなりました。
誰かがコードを修正するのを手伝ってくれますか、またはループ中に辞書を変更しないようにする方法を教えてください。上記のコードしか実際に使用できません。つまり、何もインポートしたり、基本的な関数以外を使用したりすることはできません。