村长选举 第一问
描述
使用字典和列表型变量完成村长选举。某村有40名有选举权和被选举权的村民,名单在附件name.txt中,从这40名村民中选出一人当村长,40人的投票信息由附件vote.txt中给出,每行是一张选票的信息,有效票中得票最多的村民当选。
问题:请从vote.txt 中筛选出无效票写入文件vote1.txt 。有效票的含义是:选票中只有一个名字且该名字在name.txt文件列表中,不是有效票的票称之为无效票。
代码实现
f = open("name.txt", encoding="utf-8") names = f.readlines() f.close() f = open("vote.txt", encoding="utf-8") votes = f.readlines() f.close() D = {} NUM = 0 print(votes) for vote in votes: num = len(vote.split()) # 分解成列表,并求列表长度(元素个数) if num == 1 and vote in names: # 仅一个且在姓名中,有效 D[vote[:-1]] = D.get(vote[:-1], 0) + 1 NUM += 1 else: with open("vote1.txt", "a+", encoding="utf-8") as fi: fi.write("{}".format(vote)) # 如果无效,保存到vote1文件内
运行结果
村长选举 第二问
描述
使用字典和列表型变量完成村长选举。某村有40名有选举权和被选举权的村民,名单在附件name.txt中,从这40名村民中选出一人当村长,40人的投票信息由附件vote.txt中给出,每行是一张选票的信息,有效票中得票最多的村民当选。
问题:给出当选村长的名字及其得票数。
代码实现
f = open("name.txt", encoding="utf-8") names = f.readlines() f.close() f = open("vote.txt", encoding="utf-8") votes = f.readlines() f.close() D = {} NUM = 0 for vote in votes: num = len(vote.split()) # 分解成列表,并求列表长度(元素个数) if num == 1 and vote in names: # 仅一个且在姓名中,有效 D[vote[:-1]] = D.get(vote[:-1], 0)+1 NUM += 1 l = list(D.items()) l.sort(key=lambda s: s[1], reverse=True) name = l[0][0] score = l[0][1] print("有效票数为:{} 当选村民为:{},票数为:{}".format(NUM, name, score))
运行结果
附件
在这里我把提到的两个文件放在下面。也可以使用自己的文件。
name.txt 邵冠华 瑞卡特 倪克伟 王仕琛 胡鸿博 韩可心 边禹 封亚凯 杨鑫晨 左承诚 李泽坤 资振鑫 乔威浩 张天伟 史磊 陈建福 刘笑雨 南梓晖 冷兴鑫 李东庭 冯萌 刘婕 倪昊真 王伟红 魏锐颖 向娜 张琳 周峻宇 曾钟鑫 陈嘉俊 戴光奕 郜艾荣 郭群 李光耀 李吉星 李颖铮 刘凯威 潘建宏 潘瑞宁 石梓玥
vote.txt 冷兴鑫 李东庭 冯萌 冷兴鑫 冷兴鑫 李东庭 李东庭 李东庭 冯萌 冷兴鑫 猪八戒 李东庭 李东庭 冯萌 李东庭 冯萌 李东庭 李东庭 李东庭 李东庭 冯萌 李东庭 李东庭 李东庭 李东庭 冯萌 李东庭 李东庭 李东庭 冯萌 李东庭 冯萌 李东庭 李东庭 李东庭 李东庭 冯萌 李东庭 李东庭 李东庭 李东庭
学会简单运用,如何打开文件读取,实现计票的功能。