简易评分系统

目录

一、实验目的

二、操作环境

三、实验内容和过程

1.实验内容

2.代码

2.1 用户验证功能

2.2 菜单函数

2.3 评分功能

四、结果分析

总体的输出结果:

保存文件成功截图:

五、小结


一、实验目的

1.巩固和提高学生学过的基础理论和专业知识;

2.提高学生运用所学专业知识进行独立思考和综合分析、解决实际问题的能力;

3.培养学生掌握正确的思维方法和利用计算机解决实际问题的基本技能;

4.增强学生对信息管理工作的认识,掌握信息处理方法,进行编制技术文件等基本技能的训练,使之具有一定程度的实际工作能力。

5.使学生掌握文献检索、资料查询的基本方法以及获取新知识的能力。

6.促使学生学习和获取新知识,掌握自我学习的能力。

二、操作环境

  • win11
  • PyCharm Community Edition 2020.2.5 x64
  • anaconda2019
  • python3.7

三、实验内容和过程

1.实验内容

制作一个简易评分系统,要求完成以下功能:

1. 用户验证功能

(1)输入用户名及口令,然后在已有的用户名及口令中检查是否合法;

(2)如果用户名及口令合法,进入查询界面;

(3)如果用户名及口令不合法,用户名或口令最多可输入3次,验证错误超过3次以后,自动退出系统。

2. 评分功能

(1)在评委所打的分数中,去掉一个最高分,去掉一个最低分,得出个选手的平均分;

(2)按平均分进行排序,得出各选手的名次。

3. 菜单设计

(1)用户能够设置评委的人数并输入姓名;

(2)用户能够设置选手的人数;

(3)用户能够将最后得分及名次保存到文件中。

2.代码

# _*_ coding:utf-8 _*
#作者:码银

# 用户验证功能
def login():
    print("欢迎来到简易的评分·系统,请先登录呦~")
    username = input("请输入用户名:")
    password = input("请输入口令:")

    if username == "admin" and password == "123456":
        print("登录成功!")
        return True
    else:
        print("您还有三次机会呦~")
        for i in range(3):
            username = input("请重新输入用户名:")
            password = input("请重新输入口令:")
            if username == "admin" and password == "123456":
                print("登录成功!")
                return True
        print("登录失败,请重新启动程序!")
        exit()
def menu():
    while True:
        print("~~~~~~~~~~~~~~~~")
        print("| 1.进入评分系统 ")
        print("| 2.退出       ")
        print("~~~~~~~~~~~~~~~~")
        choice = input("\n请输入操作编号:")
        if choice == "1":
            pingfen()
        elif choice == "2":
            break
        else:
            print("登出,下次使用请重新运行本程序")
def pingfen():
    # 评分功能
    num_judges = int(input("请输入评委人数:"))
    judge_names = []
    for i in range(num_judges):
        judge_names.append(input("请输入评委姓名:"))
    num_contestants = int(input("请输入选手人数:"))
    contestant_names = []
    for i in range(num_contestants):
        contestant_names.append(input("请输入选手姓名:"))
    scores = []
    for judge in judge_names:
        score = []
        for contestant in contestant_names:
            s = float(input(f"请输入{contestant}的{judge}得分:"))
            score.append(s)
        scores.append(score)

    # 计算每个选手的最终得分和名次
    final_scores = []
    for i in range(num_contestants):
        total_score = sum(scores[j][i] for j in range(num_judges))
        max_score = max(scores[j][i] for j in range(num_judges))
        min_score = min(scores[j][i] for j in range(num_judges))
        total_score -= max_score + min_score
        final_scores.append(total_score / (num_judges - 2))

    # 按平均分排序并输出名次
    contestant_final_scores = sorted(final_scores, reverse=True)
    print("各选手的最终得分及名次如下(已经自动保存到文件中):")


    for i in range(num_contestants):
        print(f"{contestant_names[i]}: {final_scores[i]}, 名次: {i + 1}")
    with open("scores.txt", "w") as f:
        for i in range(num_contestants):
            print(f"{contestant_names[i]}: {final_scores[i]}, 名次: {i + 1}", file=f)
login()
menu()

结束了,下面不用看了。

2.1 用户验证功能

# 用户验证功能
def login():
    print("欢迎来到简易的评分·系统,请先登录呦~")
    username = input("请输入用户名:")
    password = input("请输入口令:")

    if username == "admin" and password == "123456":
        print("登录成功!")
        return True
    else:
        print("您还有三次机会呦~")
        for i in range(3):
            username = input("请重新输入用户名:")
            password = input("请重新输入口令:")
            if username == "admin" and password == "123456":
                print("登录成功!")
                return True
        print("登录失败,请重新启动程序!")
        exit()

 在Python中,exit()函数用于退出程序,它接受一个可选的退出状态代码作为参数。默认情况下,如果不传递参数,状态代码将被设置为0。调用这个函数将终止程序的执行并返回到操作系统。

2.2 菜单函数

def menu():
    while True:
        print("~~~~~~~~~~~~~~~~")
        print("| 1.进入评分系统 ")
        print("| 2.退出       ")
        print("~~~~~~~~~~~~~~~~")
        choice = input("\n请输入操作编号:")
        if choice == "1":
            pingfen()
        elif choice == "2":
            break
        else:
            print("登出,下次使用请重新运行本程序")

使用while True:

通过这个语句可以达到:除非选择“2.退出”break掉,其他选项都能在执行完程序后,再次跳出菜单。

2.3 评分功能

def pingfen():
    # 评分功能
    num_judges = int(input("请输入评委人数:"))
    judge_names = []
    for i in range(num_judges):
        judge_names.append(input("请输入评委姓名:"))
    num_contestants = int(input("请输入选手人数:"))
    contestant_names = []
    for i in range(num_contestants):
        contestant_names.append(input("请输入选手姓名:"))
    scores = []
    for judge in judge_names:
        score = []
        for contestant in contestant_names:
            s = float(input(f"请输入{contestant}的{judge}得分:"))
            score.append(s)
        scores.append(score)

    # 计算每个选手的最终得分和名次
    final_scores = []
    for i in range(num_contestants):
        total_score = sum(scores[j][i] for j in range(num_judges))
        max_score = max(scores[j][i] for j in range(num_judges))
        min_score = min(scores[j][i] for j in range(num_judges))
        total_score -= max_score + min_score
        final_scores.append(total_score / (num_judges - 2))

    # 按平均分排序并输出名次
    contestant_final_scores = sorted(final_scores, reverse=True)
    print("各选手的最终得分及名次如下(已经自动保存到文件中):")


    for i in range(num_contestants):
        print(f"{contestant_names[i]}: {final_scores[i]}, 名次: {i + 1}")
    with open("scores.txt", "w") as f:
        for i in range(num_contestants):
            print(f"{contestant_names[i]}: {final_scores[i]}, 名次: {i + 1}", file=f)

四、结果分析

总体的输出结果:

保存文件成功截图:

五、小结

这是一个简单的评分系统,包括用户登录、菜单选择和评分功能。用户在登录时需要输入用户名和口令,如果输入正确,则可以进入评分系统。在评分系统中,用户可以选择进入评分功能,然后输入评委人数和选手人数,分别输入评委姓名和选手姓名,以及他们的得分。系统会自动计算每个选手的最终得分和名次,并按平均分从高到低排序输出。最后,用户的评分结果会被保存到一个文件中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/42453.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

55 # 实现可写流

先在 LinkedList.js 给链表添加一个移除方法 class Node {constructor(element, next) {this.element element;this.next next;} }class LinkedList {constructor() {this.head null; // 链表的头this.size 0; // 链表长度}// 可以直接在尾部添加内容,或者根据…

java贪心算法案例

1.零钱找回问题 这个问题在我们的日常生活中就更加普遍了。假设1元、2元、5元、10元、20元、50元、100元的纸币分别有c0, c1, c2, c3, c4, c5, c6张。现在要用这些钱来支付K元,至少要用多少张纸币?用贪心算法的思想,很显然,每一步…

计算机网络 day7 扫描IP脚本 - 路由器 - ping某网址的过程

目录 network 和 NetworkManager关系: 实验:编写一个扫描脚本,知道本局域网里哪些ip在使用,哪些没有使用? 使用的ip对应的mac地址都要显示出来 计算机程序执行的两种不同方式: shell语言编写扫描脚本 …

漏洞攻击 --- TCP -- 半开攻击、RST攻击

TCP半开攻击(半连接攻击) --- syn攻击 (1)定义: sys 攻击数据是DOS攻击的一种,利用TCP协议缺陷,发送大量的半连接请求,耗费CPU和内存资源,发生在TCP三次握手中。 A向B…

为什么ConcurrentHashMap不允许插入null值而HashMap可以?

为什么ConcurrentHashMap不允许插入null值而HashMap可以? 文章目录 为什么ConcurrentHashMap不允许插入null值而HashMap可以?HashMap源码ConcurrentHashMap源码为什么ConcurrentHashMap需要加空值校验呢?二义性问题测试代码代码分析测试结果结…

LangChain + Embedding + Chromdb,关联使用ChatGLM的本地搭建训练平台教程

一.介绍 OpenAI 在国内用户注册会遇到各种阻力,目前可行的方法是使用本地数据集的功能实现联网搜索并给出回答,提炼出TXT、WORD 文档里的内容。 现在主流的技术是基于强大的第三方开源库:LangChain 。 文档地址:🦜…

win11安装redis步骤详解

文章目录 一、redis的安装与下载1、下载2、解压3、启动redis4、测试是否安装成功 二、将redis加入到windows的服务中三、常用的redis服务命令 安装可参考的资料:https://www.runoob.com/redis/redis-install.html 一、redis的安装与下载 1、下载 下载地址&#xf…

提示工程师:如何写好Prompt

提示工程由来 提示工程是一门相对较新的学科,用于开发和优化提示以有效地将语言模型 (LM) 用于各种应用程序和研究主题。 研究人员使用提示工程来提高 LLM 在广泛的常见和复杂任务(例如问题回答和算术推理)上的能力。 开发人员使用提示工程…

120、仿真-51单片机温湿度光照强度C02 LCD1602 报警设计(Proteus仿真+程序+元器件清单等)

方案选择 单片机的选择 方案一:STM32系列单片机控制,该型号单片机为LQFP44封装,内部资源足够用于本次设计。STM32F103系列芯片最高工作频率可达72MHZ,在存储器的01等等待周期仿真时可达到1.25Mip/MHZ(Dhrystone2.1)。内部128k字节…

【Docker】Docker安装与操作

docker的安装与命令 一、安装 docker1. 安装依赖包2. 信息查看 二、Docker 镜像操作1. 搜索镜像2. 获取镜像3. 镜像加速下载4. 查看镜像相关信息5. 删除镜像6. 上传镜像7. 存出和载入镜像 三、Docker 容器操作1. 创建容器2. 查看容器3. 启动容器4. 停止容器5. 进入容器6. 容器与…

SpringBoot整合SpringCloudStream3.1+版本Kafka

SpringBoot整合SpringCloudStream3.1版本Kafka 下一节直通车 SpringBoot整合SpringCloudStream3.1版本的Kafka死信队列 为什么用SpringCloudStream3.1 Springcloud架构提供,基于spring生态能够快速切换市面上常见的MQ产品3.1后使用配置文件的形式定义channel&am…

# Linux下替换删除文件中的颜色等控制字符的方法

Linux下替换删除文件中的颜色等控制字符的方法 文章目录 Linux下替换删除文件中的颜色等控制字符的方法1 Linux下的控制字符(显示的文字并不是他本身):2 颜色字符范例:3 替换4 最后 我们在shell编程显示输出时,会定义文…

Linux的时间函数

2023年7月19日,周三下午 我今天基于GitHub搭建了自己的博客网站,欢迎大家来我的个人博客网站阅读我的博客 巨龙之路的GitHub个人博客 (julongzhilu.github.io) 目录 time函数原型使用方法ctime函数原型使用方法疑惑gmtime、 localtime函数原型什么是分…

WEB:FlatScience

背景知识 sql注入 SQLite数据库知识 SQLite3注入方法 题目 用dirsearch进行扫描,下面几个关键目录:robots.txt,login.php,admin.php,剩下的目录就是一些pdf格式的论文了 一个一个访问并查看源代码,在查看l…

常用API学习06(Java)

Biglnteger public BigInteger(int num, Random rnd) 获取随机大整数,范围:[0~2的num次方-1] public BigInteger(String val) 获取指定的大整数 public BigInteger(String val, int radix) 获取指定进制的大整数 public static BigInteg…

怎么给pdf文件加密?pdf文档如何加密

在数字化时代,保护个人和机密信息的重要性越来越受到关注。PDF(Portable Document Format)是一种广泛使用的文件格式,用于共享和存储各种类型的文档。然而,由于其易于编辑和复制的特性,保护PDF文件中的敏感…

一张表实现短视频“评论区“完整功能

前言 现如今,不管是哪种类型的应用,评论区都少不了。从工具类的到媒体信息流类的,评论留言都是最基本的互动环节。比如抖音短视频下,针对视频每个用户都可以发表自己的观点;而针对用户的评论,其他的用户又可…

Spring Cloud—GateWay之限流

RequestRateLimiter RequestRateLimiter GatewayFilter 工厂使用 RateLimiter 实现来确定是否允许当前请求继续进行。如果不允许,就会返回 HTTP 429 - Too Many Requests(默认)的状态。 这个过滤器需要一个可选的 keyResolver 参数和特定于…

Spring @RequestMapping 工作原理

Spring RequestMapping 工作原理 配置基础启动类及Controller类 SpringBootApplication public class DemoServiceApplication {public static void main(String[] args) {SpringApplication.run(DemoServiceApplication.class, args);} }RestController public class HelloC…

单元测试用例到底该如何设计?

目录 前言 使用参数方法创建测试用例 使用执行路径方法创建测试用例 总结 前言 最近一些大公司在进行去测试化的操作,这一切的根源大概可以从几年前微软一刀切砍掉所有内部正式的测试人员开始说起,当时微软内部的测试工程师有一部分转职成了开发工程…