用到的模块请自行导入(在pycharm中菜单栏File选取setting→Python Interprete→“+” → 搜索相应的模块名称,选中→Install Package进行下载)
我用的Excel文件存储的人名格式如下图所示,表头为:姓名,表单名为:Sheet2,列名为:A,文件名为:宿舍名单.xlsx
代码如下:
// A code block
# 调取用到的模块
import pygame, sys, random
from pygame.locals import *
import pandas as pd
# 定义从文件导入名单的函数
def nameRandom(fileName, sheetName, columnName,cloName):
name = pd.read_excel(fileName, sheet_name=sheetName, usecols=columnName)
nameList = []
for i in name[cloName]:
nameList.append(i)
return nameList
# 异常处理
while True:
try:
# 用户输入存放人员名单的Excel文件中,人名数据那一列的第一行,即表头,如果第一行放的是人名,这个人名将不会被选取到
namePath = input('##############################################################\n'
'请将存放人员名单的Excel文件中,人名数据那一列的第一行改为表头,例如:姓名\n'
'注意:不要将第一行就放入人名!\n'
'如果未设置表头,请设置好后重新运行程序,\n'
'并请您在此输入您设置的表头内容:')
# 用户输入存放数据的文件路径、表单名、列名
filePath = input('请输入存放人员名单的Excel文件名称及路径,例如:D:/chapter01/活动库.xlsx :')
sheetPath = input('请输入存放人员名单的表单名称,例如:Sheet1 :')
cloPath = input('请输入存放人员名单的列名,例如:A :')
# 从文件中调用数据,放入列表
nameList = nameRandom(filePath, sheetPath, cloPath, namePath)
except FileNotFoundError:
print('\n########## 您输入的文件不存在,请重新输入 ##########')
except ValueError:
print('\n########## 您输入的表单不存在,请重新输入 ##########')
except KeyError:
print('\n########## 您输入的表头不存在当前表单中,请确认表单及表头后重新输入 ##########')
except AssertionError:
print('\n########## 输入内容不能为空 ##########')
else:
break
# 输入活动库的路径: 本程序是将活动直接放入列表中,也可以根据自己的需要用下行代码调用文件中的活动内容
# acttiveList = nameRandom(r'活动库.xlsx','Sheet1','A','活动')
# 设置显示板上将展示的3个文字变量
name = ''
active = ''
startEnd = ''
# 初始化pygame
pygame.init()
# 第一行显示的文本
title ='选人啦'
# 设置显示板的大小
screen = pygame.display.set_mode((1100,600))
# 设置现实版的标题
pygame.display.set_caption('随机点名')
# 设置字体和大小
startEndFont=pygame.font.Font('simkai.ttf',60)
nameFont=pygame.font.Font('simkai.ttf',80)
# 设置计数器容器
counter = 0
# 显示板
while True:
# 显示板的背景图
bg=pygame.image.load('22.png')
screen.blit(bg,(0,0))
# 遍历事件是否为退出,设置退出循环开关,当event为QUIT时退出循环
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
# 获得键盘事件
keys=pygame.key.get_pressed()
# 当键盘事件为按下回车键时,随机选择名单
if keys[K_RETURN]:
# 防止由名单列表为空引起的报错
if len(nameList)!=0:
# 随机选人
name = random.choice(nameList)
# 将活动放入一个列表,也可以调用nameRandom()函数从文件中导入
activeList = ['唱歌', '跳舞', '俯卧撑', '蛙跳']
# 随机选择活动
active = random.choice(activeList)
# 显示板展示选人是否结束
startEnd = '松开回车键结束'
# 当回车键未按下时
else:
# 防止由name删除后不在列表中而引起的报错
if name in nameList:
counter += 1 #记录当前选出了多少小组
# 向用户展示当前是第几次选人,以及选人的结果
print("第"+str(counter)+"小组,他们是:<" + name + " 小组>, 选择的活动名是:《" + active+"》")
# 删除选中的姓名,避免重复出现
nameList.remove(name)
# 显示板展示可以开始选人
startEnd = '按下回车键开始'
# 设置输出的文本字体及颜色
titleText = startEndFont.render(title, True, (0,0,250))
nameText = nameFont.render(name, True, (0,0,250))
activeText = nameFont.render(active, True, (0,0,250))
okText = startEndFont.render(startEnd, True, (0,0,250))
# 设置输出的文本位置
screen.blit(titleText,(300,120))
screen.blit(nameText,(120,260))
screen.blit(okText,(200,400))
screen.blit(activeText,(530,260))
# 更新展示板
pygame.display.update()
// An highlighted block
# 调取用到的模块
import pygame, sys, random
from pygame.locals import *
import pandas as pd
# 定义从文件导入名单的函数
def nameRandom(fileName, sheetName, columnName,cloName):
name = pd.read_excel(fileName, sheet_name=sheetName, usecols=columnName)
nameList = []
for i in name[cloName]:
nameList.append(i)
return nameList
# 异常处理
while True:
try:
# 用户输入存放人员名单的Excel文件中,人名数据那一列的第一行,即表头,如果第一行放的是人名,这个人名将不会被选取到
namePath = input('##############################################################\n'
'请将存放人员名单的Excel文件中,人名数据那一列的第一行改为表头,例如:姓名\n'
'注意:不要将第一行就放入人名!\n'
'如果未设置表头,请设置好后重新运行程序,\n'
'并请您在此输入您设置的表头内容:')
# 用户输入存放数据的文件路径、表单名、列名
filePath = input('请输入存放人员名单的Excel文件名称及路径,例如:D:/chapter01/活动库.xlsx :')
sheetPath = input('请输入存放人员名单的表单名称,例如:Sheet1 :')
cloPath = input('请输入存放人员名单的列名,例如:A :')
# 从文件中调用数据,放入列表
nameList = nameRandom(filePath, sheetPath, cloPath, namePath)
except FileNotFoundError:
print('\n########## 您输入的文件不存在,请重新输入 ##########')
except ValueError:
print('\n########## 您输入的表单不存在,请重新输入 ##########')
except KeyError:
print('\n########## 您输入的表头不存在当前表单中,请确认表单及表头后重新输入 ##########')
except AssertionError:
print('\n########## 输入内容不能为空 ##########')
else:
break
# 输入活动库的路径: 本程序是将活动直接放入列表中,也可以根据自己的需要用下行代码调用文件中的活动内容
# acttiveList = nameRandom(r'活动库.xlsx','Sheet1','A','活动')
# 设置显示板上将展示的3个文字变量
name = ''
active = ''
startEnd = ''
# 初始化pygame
pygame.init()
# 第一行显示的文本
title ='选人啦'
# 设置显示板的大小
screen = pygame.display.set_mode((1100,600))
# 设置现实版的标题
pygame.display.set_caption('随机点名')
# 设置字体和大小
startEndFont=pygame.font.Font('simkai.ttf',60)
nameFont=pygame.font.Font('simkai.ttf',80)
# 设置计数器容器
counter = 0
# 显示板
while True:
# 显示板的背景图
bg=pygame.image.load('22.png')
screen.blit(bg,(0,0))
# 遍历事件是否为退出,设置退出循环开关,当event为QUIT时退出循环
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
# 获得键盘事件
keys=pygame.key.get_pressed()
# 当键盘事件为按下回车键时,随机选择名单
if keys[K_RETURN]:
# 防止由名单列表为空引起的报错
if len(nameList)!=0:
# 随机选人
name = random.choice(nameList)
# 将活动放入一个列表,也可以调用nameRandom()函数从文件中导入
activeList = ['唱歌', '跳舞', '俯卧撑', '蛙跳']
# 随机选择活动
active = random.choice(activeList)
# 显示板展示选人是否结束
startEnd = '松开回车键结束'
# 当回车键未按下时
else:
# 防止由name删除后不在列表中而引起的报错
if name in nameList:
counter += 1 #记录当前选出了多少小组
# 向用户展示当前是第几次选人,以及选人的结果
print("第"+str(counter)+"小组,他们是:<" + name + " 小组>, 选择的活动名是:《" + active+"》")
# 删除选中的姓名,避免重复出现
nameList.remove(name)
# 显示板展示可以开始选人
startEnd = '按下回车键开始'
# 设置输出的文本字体及颜色
titleText = startEndFont.render(title, True, (0,0,250))
nameText = nameFont.render(name, True, (0,0,250))
activeText = nameFont.render(active, True, (0,0,250))
okText = startEndFont.render(startEnd, True, (0,0,250))
# 设置输出的文本位置
screen.blit(titleText,(300,120))
screen.blit(nameText,(120,260))
screen.blit(okText,(200,400))
screen.blit(activeText,(530,260))
# 更新展示板
pygame.display.update()