'''
【选举小程序】
1.从键盘录入候选人姓名、编号(按录入顺序)
2.打印候选人信息,格式:
编号 姓名
1 张三
2 李四
3 王五
3.进行投票,输入候选人编号,并累计票数,直到输入-1结束投票
4.打印结果,格式:
编号 姓名 得票数
1 张三 2
2 李四 5
3 王五 3
最终当选人:XX
'''
#候选人类
class Hxr:
#构造候选人的方法
def __init__(self,num,name):
self.num=num
self.name=name
self.depiao=0
#公示候选人信息的方法
def showInfos(self,res=0): #传参res,用于决定是否打印得票数
s=f" {self.num}\t{self.name}\t"
if res!=0: #res默认值0,若要打印得票一栏,给res赋值即可
s+=f"{self.depiao}\t"
print(s)
#得票数计算的方法
def addVote(self):
self.depiao+=1
#投票程序类
class VoteProgram():
def __init__(self):
self.hxrs=[] #存放候选人信息的列表
#录入候选人的方法
def addHxr(self):
print("【录入候选人信息】")
a=0 #编号变量
while True: #不定次循环录入候选人信息
a+=1 #自动编号
name=input("请输入候选人姓名:")
h=Hxr(a,name) #创建候选人对象
self.hxrs.append(h) #对象添加进列表
next=input("任意键继续录入,输入-1结束录入")
if next=="-1":
break
#公示候选人信息的方法
def showHxr(self):
print("【候选人信息如下】")
print("编号\t姓名\t")
for b in self.hxrs:
b.showInfos()
#投票的方法
def vote(self):
print("*"*30)
print("【开始投票】")
while True:
num=input("请输入所投候选人编号(输入-1结束录入)")
if num=="-1":
break
for h in self.hxrs: #循环所有候选人
if str(h.num)==num: #找到输入的编号对应的候选人(此处不限制int是为了避免程序报错终止
h.addVote() #当前候选人得票数+1
break
else: #不符合投票规则的输入
print("此编号无效!")
#公示票选结果的方法
def showResult(self):
max_piao=0
dxr=None
print("投票结束,结果如下:")
print("编号\t姓名\t得票数\t")
for h in self.hxrs: #循环所有候选人
h.showInfos(1) #给res赋参数1,打印得票
if h.depiao>max_piao:
max_piao=h.depiao
dxr=h
print("【当选人信息】")
dxr.showInfos(1)
#主程序
def main(self):
#1.录入候选人信息
self.addHxr()
#2.公示候选人信息
self.showHxr()
#3.投票
self.vote()
#4.公示票选结果
self.showResult()
if __name__ == "__main__":
vp = VoteProgram()
vp.main()