python寫的一個選票系統

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""

# -*- coding: utf-8 -*-
"""
Created on Fri Nov  12 13:54:22 2019

@author: mikey
"""
import numpy as np 
def count_name():
    count = {}
    count['Bill'] = 10
    count['Jane'] = 15
    count['Charlle'] = 18
    count['Mary'] = 17
    value_list = sorted(list(count.items()), key=lambda x:x[1], reverse=True)
    print(value_list)
    se = 0
    vlist=[]
    for e in value_list:
        vlist.append(list(e))
        se += e[1]
    c = 0.5* float(se)
    print(vlist)
    #c=0.5*float(np.sum(value_list[1]))
    while(1):
        #排序# 
        print("\n一輪開始:競選者的新票數-origin")
        print(vlist)  
        print("競選者的票數-排序後") 
        vlist = sorted(vlist, key=lambda x:x[1], reverse=True)
        #value_list.sort(reverse=True)
        
        print(vlist) 
        number_of_list=len(vlist)
        minv = vlist[-1][1]
        if float(vlist[0][1])>c:
            #print(count[0]+" is winner")
            print("winner  " + str(vlist[0][0]) + " has " + str(vlist[0][1]) + " votes")
            break
        else: 
            del vlist[-1]
            print("競選者的票數-去掉最低") 
            print(vlist)    
        number_of_list=len(vlist)
        print(number_of_list)
        y=np.random.randint(minv, size=number_of_list)
        v={}
        ratio = minv / sum(y)
        for i in range(len(y)):
            v[i] = int(y[i]*ratio)
        vl = list(v.values())
        ##隨機產生一個序號,將差值加給這個人
        idx=np.random.randint(number_of_list)
        v[idx] = v[idx] + (minv-int(np.sum(vl)))
        #v則爲隨機產生的序列,序列之和爲淘汰那位的票數        
        print("淘汰者的票數產生的隨機數")
        print(v)

        #將隨機產生的序列加到原來的序列中
        print(type(vlist[0][0]))
        for i in range(len(vlist)):
           vlist[i][1] += v[i]
      
count_name()

進行投票選舉時,如果投票者手中有多票的時候,該怎麼統計票數呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章