用到的模块请自行导入(在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()