美文网首页
一个简单的投票统计程序V1.0

一个简单的投票统计程序V1.0

作者: snape00 | 来源:发表于2019-12-07 08:04 被阅读0次

    引子

    事情是这样的,我们单位最近召开新一届党委和纪委会,需要选举新一届党委委员和纪委委员,选举的方式采用差额选举。党委委员候选人9名(7名+2名差额),纪委委员候选人6名(5名+1名差额)。应到参会代表75人,实到参会代表71人。

    到会的每位代表都有两张选票。每张选票的每一名候选人姓名上方是一个空表格,赞成画圈⭕️,反对画✖️,弃权空白。

    作为计票人,收上来的选票中,每个人选票结果是不一样的,需要统计出候选人赞成多少票,反对多少票,弃权多少票,然后根据投票的多少排序,最后输出姓名和对应的选票。

    我们的计票人员居然还在用画“正”字来统计票数,不禁唏嘘!正好我在学习python,萌生用代码来解决这个问题。


    程序设计思路

    • 需要告诉程序候选人的数量
    • 需要输入候选人的姓名
    • 需要输入每一张选票的结果,用数字1代表赞成,数字2代表反对,数字0代表弃权。
    • 将所有选票的赞成票、反对票及弃权票进行汇总
    • 最终输出结果:姓名对应赞成票数,就可以看出来候选人获得的赞成票了和顺序了

    代码

    """
    给候选人投票,分赞成、反对和弃权
    统计每个候选人的赞成、反对和弃权票总数
    
    version:0.1
    author:chris
    """
    name_list = []
    agree_list = []
    opposition_list = []
    abstention_list = []
    result_list = []
    a = k = n = 0
    
    j = int(input("请问有几名候选人?:"))   # 确定候选人的数量
    
    # 下面的代码是根据确定的候选人数量,将赞成、反对和弃权的列表初始化,每个索引位置都为零。
    while a < j:
        agree_list.append(0)
        opposition_list.append(0)
        abstention_list.append(0)
        a += 1
    
    # 下面的代码是把候选人的姓名构建成一个list
    while k < j:
        i = input("请输入第%d个候选人姓名:" % (k+1))
        name_list.append(i)
        k += 1
    
    vote_num = int(input("请问有多少张选票?"))
    # 下面的代码作用是通过输入的每一张选票结果,分别统计出对应候选人的赞成票、反对票和弃权票的情况
    while n < vote_num:
        n += 1
        vote = input("请输入第%d张选票结果:" % n)
        for i in range(j):
            if int(vote[i]) == 1:
                agree_list[i] += 1
            elif int(vote[i]) == 2:
                opposition_list[i] += 1
            elif int(vote[i]) == 0:
                abstention_list[i] += 1
            else:
                print("选票无效作废")
    
    print("选票结果如下:")
    print(name_list)
    print("赞成票", agree_list)
    print("反对票", opposition_list)
    print("弃权票", abstention_list)
    
    # 下面构建一个字典,键是候选人姓名,值是赞成票票数
    print("整理后的选票情况如下:")
    dict_vote = {}
    for m in range(j):
        dict_vote.update({name_list[m]: agree_list[m]})
    print(dict_vote)
    

    运行结果

    请问有几名候选人?:6
    请输入第1个候选人姓名:a
    请输入第2个候选人姓名:b
    请输入第3个候选人姓名:c
    请输入第4个候选人姓名:d
    请输入第5个候选人姓名:e
    请输入第6个候选人姓名:f
    请问有多少张选票?5
    请输入第1张选票结果:112111
    请输入第2张选票结果:101111
    请输入第3张选票结果:211111
    请输入第4张选票结果:111211
    请输入第5张选票结果:011111
    选票结果如下:
    ['a', 'b', 'c', 'd', 'e', 'f']
    赞成票 [3, 4, 4, 4, 5, 5]
    反对票 [1, 0, 1, 1, 0, 0]
    弃权票 [1, 1, 0, 0, 0, 0]
    整理后的选票情况如下:
    {'a': 3, 'b': 4, 'c': 4, 'd': 4, 'e': 5, 'f': 5}
    

    小结

    经过努力,基本实现了最初的目的。但是程序里面还有需要改进的地方,比如最终结果根据票数排序,赞成、反对和弃权显示结果和字典格式显示结果存在重复现象,通过差额选举的方式,告诉哪些人当选了等。

    其实,我最初的设想是将代码打包成图形界面,上面是候选人姓名,下面对应位置可以点击赞成、反对或者弃权,最后可以导出投票结果。

    后续我将对程序进行改进。

    相关文章

      网友评论

          本文标题:一个简单的投票统计程序V1.0

          本文链接:https://www.haomeiwen.com/subject/riiygctx.html