ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

用python实现随机选人、选取活动或节目小程序

2021-05-02 19:31:33  阅读:1902  来源: 互联网

标签:nameList 选人 name python 表头 选取 pygame ########## 输入


用到的模块请自行导入(在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))
    # 遍历事件是否为退出,设置退出循环开关,当eventQUIT时退出循环
    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()

标签:nameList,选人,name,python,表头,选取,pygame,##########,输入
来源: https://blog.csdn.net/yangyanan18/article/details/116355949

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有