python基础之学生成绩管理系统

声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章

声明:本文主要用作技术分享,所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律法规。

while True:

    try:user_input = int(input("请选择您的操作 (0-8): "))if 0 <= user_input <= 8:breakelse:print("输入的数字不在范围内,请输入0到8之间的整数。")except ValueError:print("无效的输入,请输入一个整数。")
​
# 现在 user_input 包含了一个有效的整数,你可以继续你的程序逻辑
print(f"您选择的操作是: {user_input}")

这段代码做了以下几件事情:

  1. 使用 while True 创建了一个无限循环,这意味着代码会一直运行,直到遇到 break 语句。

  2. 使用 try 块尝试将用户的输入转换为整数。如果输入不是一个有效的整数,int() 函数会抛出一个 ValueError 异常。

  3. 如果没有异常发生,代码会检查整数是否在0到8的范围内。如果不在,会打印一条消息并继续循环。

  4. 如果输入的整数在范围内,break 语句会结束循环。

  5. 如果输入不是整数,except 块会捕获 ValueError 并打印一条错误消息,然后继续循环。

这样,只有当用户输入了一个有效的整数时,程序才会继续执行。

在Python中,如果你想在字符串中插入变量的值,而不是将变量名作为字符串的一部分打印出来,你需要使用格式化字符串。有几种方法可以做到这一点:

  1. 使用 % 操作符(旧式字符串格式化):

    python

    user_input = 5  # 假设这是之前获取的有效输入
    print("您选择的操作是:%d" % user_input)
  2. 使用 .format() 方法(新式字符串格式化):

    python

    user_input = 5  # 假设这是之前获取的有效输入
    print("您选择的操作是:{}".format(user_input))
  3. 使用 f-string(Python 3.6+):

    python

    user_input = 5  # 假设这是之前获取的有效输入
    print(f"您选择的操作是:{user_input}")

f-string 是最现代和最简洁的方法,它允许你直接在字符串中嵌入表达式。上面的任何一个方法都可以让你将变量 user_input 的值插入到字符串中,而不是将其作为字符串 "user_input" 打印出来。

%s 是另一个格式说明符,用于字符串,而 %d 是用于整数

如果你想要在选择操作后直接回到原页面,而不是打印额外的信息,你可以将打印菜单的代码封装到一个函数中,并在每次循环时调用这个函数。这样,当用户选择操作0(退出管理系统)时,程序会退出循环,而不会再次打印菜单。下面是修改后的代码:

python

def print_menu():print("*****************************************")print("-----------欢迎使用学生成绩管理系统-----------")print("    *         【1】输入学生成绩         *   ")print("    *         【2】显示统计数据         *   ")print("    *         【3】查找学生成绩         *   ")print("    *         【4】修改学生成绩         *   ")print("    *         【5】删除学生成绩         *   ")print("    *         【6】插入学生成绩         *   ")print("    *         【7】按平均分排列         *   ")print("    *         【8】显示学生成绩         *   ")print("    *         【0】退出管理系统         *   ")print("*****************************************")
​
while True:print_menu()  # 调用函数打印菜单try:user_input = int(input("请选择您的操作 (0-8):"))if user_input >= 0 and user_input <= 8:breakelse:print("输入的数字不在范围内,请输入0-8之间的整数")except ValueError:print("无效的输入,请输入一个整数")
​
print(f"您选择的操作是:{user_input}")
if user_input == 0:print("感谢使用学生成绩管理系统,再见!")
else:# 这里可以添加对应 user_input 的操作代码pass

在这个代码中,print_menu 函数包含了打印菜单的所有 print 语句。在 while 循环中,每次循环都会调用 print_menu 函数来显示菜单。当用户输入0时,程序会退出循环,并打印退出信息。如果用户输入了其他操作,程序会继续执行,而不会再次打印菜单。这样,用户选择退出后,程序会直接结束,而不会再次打印菜单。

def print_menu(): 是Python中的一个函数定义。

让我来详细解释一下:

  1. def 是Python中的关键字,用于定义一个函数。

  2. print_menu 是函数的名称。在Python中,函数名通常使用小写字母和下划线来分隔单词,以提高可读性。

  3. () 表示这个函数不接受任何参数。如果函数需要接受参数,可以在括号内添加参数名称。

  4. : 表示函数定义的开始。在Python中,函数体必须缩进,以表示属于这个函数。

所以,def print_menu(): 表示定义了一个名为 print_menu 的函数,它不接受任何参数。

要将张三和李四的成绩存储到学生成绩管理系统中,你可以手动将这些数据添加到全局字典 student_grades

# 全局字典,存储学生成绩,键是学生名字,值是成绩列表
student_grades = {"张三": [95],"李四": [27]
}
total_scores = []
min_score = float('inf')  # 初始化最低分为无穷大
max_score = float('-inf')  # 初始化最高分为无穷小

这部分代码初始化了三个变量:

  1. total_scores:这是一个空列表,用于存储所有学生的成绩,以便后续计算总分和平均分。

  2. min_score:这是一个变量,用于存储所有学生成绩中的最低分。float('inf') 表示无穷大,这是一个特殊的浮点数值,用来确保任何实际的成绩都会比这个初始值小,从而在后续的比较中能够正确地更新最低分。

  3. max_score:这是一个变量,用于存储所有学生成绩中的最高分。float('-inf') 表示负无穷大,这是一个特殊的浮点数值,用来确保任何实际的成绩都会比这个初始值大,从而在后续的比较中能够正确地更新最高分。

    total_scores = [score for scores in student_grades.values() for score in scores]  # 将所有成绩添加到总分列表中min_score = min(min_score, *scores)  # 更新最低分max_score = max(max_score, *scores)  # 更新最高分

    这部分代码做了以下几件事情:

    • for scores in student_grades.values():这个循环遍历 student_grades 字典中的所有值(即每个学生的成绩列表)。.values() 方法返回字典中所有值的视图,这里的值就是每个学生的成绩列表。

    • total_scores.extend(scores)extend 方法用于将一个列表中的所有元素添加到另一个列表的末尾。这里,它将每个学生的成绩列表中的所有成绩添加到 total_scores 列表中。

    • min_score = min(min_score, *scores):这行代码使用 min 函数来更新 min_score 的值。*scores 是一个解包操作,它将 scores 列表中的所有元素作为独立的参数传递给 min 函数。这样,min_score 就会被设置为当前 min_score 和当前学生成绩列表中的最低成绩之间的最小值。

    • max_score = max(max_score, *scores):这行代码使用 max 函数来更新 max_score 的值。同样,*scores 是一个解包操作,它将 scores 列表中的所有元素作为独立的参数传递给 max 函数。这样,max_score 就会被设置为当前 max_score 和当前学生成绩列表中的最高成绩之间的最大值。

total_scores = [score for scores in student_grades.values() for score in scores]
  1. 循环中并没有进行计算总分,而是遍历数据找到下面代码所需求的

  2. student_grades.values():这部分调用了字典的 .values() 方法,它返回一个包含字典所有值(在这里是学生的成绩列表)的视图对象。

  3. for scores in student_grades.values():这是一个外层循环,它遍历 student_grades 字典中的每个学生的成绩列表。在每次迭代中,scores 变量包含了一个学生的成绩列表。

  4. for score in scores:这是一个内层循环,它遍历外层循环中得到的每个成绩列表 scores。在每次迭代中,score 变量包含了一个具体的成绩值。

  5. score:这是列表推导式中要收集的元素。对于内层循环的每次迭代,它将当前的成绩值添加到新列表中。

在Python中,try 关键字用于引入一个异常处理块,它允许程序在执行代码时发生错误(异常)的情况下捕获并处理这些错误,而不是让程序崩溃。

try 语句的基本结构如下:

python复制

try:# 尝试执行的代码块pass
except ExceptionType:# 如果在try块中抛出了ExceptionType类型的异常,则执行这里的代码pass
  1. TypeError

    • TypeError 异常是在类型不兼容的操作发生时抛出的。例如,当你尝试将一个整数和一个字符串相加,或者调用一个不支持的类型的方法时,就会抛出 TypeError

    • 例子:

      python

      number = 10
      try:result = number + "5"  # 尝试将整数和字符串相加
      except TypeError:print("TypeError: 无法将整数和字符串相加")
  2. ValueError

    • ValueError 异常是在传入一个值,而该值与期望的值不匹配时抛出的。例如,当你尝试将一个非数字字符串转换为整数或浮点数,或者当你传递了一个不适合的参数给某些函数时,就会抛出 ValueError

    • 例子:

      python复制

      value = "hello"
      try:number = int(value)  # 尝试将非数字字符串转换为整数
      except ValueError:print("ValueError: 无法将字符串转换为整数")
 # 学生存在,插入成绩到现有列表student_grades[name].append(score)
# 学生不存在,创建新的学生条目student_grades[name] = [score]
  1. for name, scores in student_grades.items():

    • 这是一个 for 循环,它遍历 student_grades 字典中的每个键值对(即每个学生的成绩)。

    • .items() 方法返回一个包含字典中所有键值对的视图对象,其中每个键值对是一个元组,第一个元素是键(学生姓名),第二个元素是值(学生的成绩列表)。

    • 在每次迭代中,name 变量会被赋值为当前学生的姓名,scores 变量会被赋值为当前学生的成绩列表。

  2. scores_str = ', '.join(map(str, scores))

    • map(str, scores) 是一个 map 函数,它将 scores 列表中的每个元素(成绩)转换为字符串类型。

    • map 函数返回一个迭代器,它包含转换后的所有字符串。

    • ', '.join(...) 是一个字符串方法,它将迭代器中的所有字符串连接成一个单独的字符串,每个字符串之间用逗号和空格分隔。

    • 例如,如果 scores[97, 85, 90],那么 scores_str 将会是 "97, 85, 90"

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关联度分析、灰色预测GM(1,1)、GM(1,1)残差模型——基于Python实现

关联度分析 import numpy as np import pandas as pd #关联度分析 #参考序列 Y_0[170,174,197,216.4,235.8] #被比较序列 Y_1[195.4,189.9,187.2,205,222.7] Y_2[308,310,295,346,367]#初始化序列 X_0np.array(Y_0)/Y_0[0] X_1np.array(Y_1)/Y_1[0] X_2np.array(Y_2)/Y_2[0]#计…

Java基础知识(五)

文章目录 ObjectObject 类的常见方法有哪些&#xff1f; 和 equals() 的区别hashCode() 有什么用&#xff1f;为什么要有 hashCode&#xff1f;为什么重写 equals() 时必须重写 hashCode() 方法&#xff1f; 参考链接 Object Object 类的常见方法有哪些&#xff1f; Object 类…

【大模型】LLaMA: Open and Efficient Foundation Language Models

链接&#xff1a;https://arxiv.org/pdf/2302.13971 论文&#xff1a;LLaMA: Open and Efficient Foundation Language Models Introduction 规模和效果 7B to 65B&#xff0c;LLaMA-13B 超过 GPT-3 (175B)Motivation 如何最好地缩放特定训练计算预算的数据集和模型大小&…

解决 Gradle 报错:`Plugin with id ‘maven‘ not found` 在 SDK 开发中的问题

在 SDK 开发过程中&#xff0c;使用 Gradle 构建和发布 SDK 是常见的任务。在将 SDK 发布为 AAR 或 JAR 包时&#xff0c;你可能会使用 apply plugin: maven 来发布到本地或远程的 Maven 仓库。但是&#xff0c;随着 Gradle 版本的更新&#xff0c;特别是从 Gradle 7 版本开始&…

2024 RISC-V中国峰会 安全相关议题汇总

安全之安全(security)博客目录导读 第四届 RISC-V 中国峰会(RISC-V Summit China 2024)于8月21日至23日在杭州成功举办。此次峰会汇聚了 RISC-V 国际基金会、百余家重点企业及研究机构,约3000人线下参与,并在19日至25日间举办了超过20场同期活动,与全球开发者共同…

Pyhon基础数据结构(列表)【蓝桥杯】

a [1,2,3,4,5] a.reverse() print("a ",a) a.reverse() print("a ",a)# 列表 列表&#xff08;list&#xff09;有由一系列按照特定顺序排序的元素组成 列表是有顺序的&#xff0c;访问任何元素需要通过“下标访问” 所谓“下标”就是指元素在列表从左…

【Visual Studio系列教程】如何在 VS 上编程?

上一篇博客中&#xff0c;我们介绍了《什么是 Visual Studio&#xff1f;》。本文&#xff0c;我们来看第2篇《如何在 VS 上编程&#xff1f;》。阅读本文大约10 分钟。我们会向文件中添加代码&#xff0c;了解 Visual Studio 编写、导航和了解代码的简便方法。 本文假定&…

MySQL更换瀚高语法更换

MySQL更换瀚高语法更换 一、前言二、语句 一、前言 水一篇,mysql更换瀚高之后&#xff0c;一些需要更换的语法介绍 > 二、语句 MySQL瀚高MySQL用法瀚高用法说明ifnull(x,y)coalesce(x,y)相同相同用于检查两个表达式并返回第一个非空表达式。如果第一个表达式不是 NULL&…

[ 跨域问题 ] 前后端以及服务端 解决跨域的各种方法

这篇文章主要介绍了跨域问题&#xff0c;包括其定义、产生原因及各种解决方法。原因是浏览器安全策略限制&#xff0c;方法有 JSONP、CORS、Domain、 postMessage、Nginx配置、.NetCore配置。 前言 什么是跨域问题? 在Web应用中&#xff0c;当一个网页的脚本试图去请求另一个域…

论文阅读——Intrusion detection systems using longshort‑term memory (LSTM)

一.基本信息 论文名称&#xff1a;Intrusion detection systems using longshort‑term memory (LSTM) 中文翻译&#xff1a;基于长短期记忆(LSTM)的入侵检测系统 DOI&#xff1a;10.1186/s40537-021-00448-4 作者&#xff1a;FatimaEzzahra Laghrissi1* , Samira Douzi2*, Kha…

大数据挖掘期末复习

大数据挖掘 数据挖掘 数据挖掘定义 技术层面&#xff1a; 数据挖掘就是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中&#xff0c;提取隐含在其中、人们事先不知道的、但又潜在有用的信息的过程。 数据准备环节 数据选择 质量分析 数据预处理 数据仓库 …

搭建es环境

centos7搭建elasticsearch环境 首先考虑使用 Docker 来安装 Elasticsearch、Kibana 和 Logstash。在安装过程中&#xff0c;可能会遇到一些问题&#xff0c;但通过适当的方法可以解决。 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.14.3 首先创建一个网络&a…

k8s 学习笔记之 k8s 存储管理

文章目录 概述卷卷的常用类型emptyDir边车容器 HostPathnfsPV/PVC静态供给 PV 和 PVC创建静态 PV创建 pvc创建 pod 应用 pvc 动态供给 PV 和 PVC创建 StorageClass创建 pvc创建 pod 使用 pvc PV 的生命周期 内置存储对象ConfigMapSecret 配置文件自动重新加载方案**1. 应用内动…

等精度频率计的设计

目录 主控电路设计 频率测量与计算电路设计 顶层电路设计 功能扩展及应用 频率测量的三种方法 等精度频率计通过控制闸门信号与被测信号同步&#xff0c;消除了直接测频法中的计数误差&#xff0c;因而在被测信号频率范围内测量精度基本上是恒定的。 本节以设计能够测量信号…

Matlab使用深度网络设计器为迁移学习准备网络

迁移学习通过对预训练网络进行微调&#xff0c;使深度学习模型能在少量数据下快速适应新任务&#xff0c;类似于“举一反三”&#xff0c;而不需要从头训练。本文使用matlab自带的深度网络设计器&#xff0c;可以便捷地修改预训练网络进行迁移学习&#xff0c;通过对预训练网络…

基于yolov8、yolov5的电塔缺陷检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;电塔缺陷检测在电力设备巡检、运行维护和故障预防中起着至关重要的作用&#xff0c;不仅能帮助相关部门实时监测电塔运行状态&#xff0c;还为智能化检测系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的电塔缺陷检测模型&#xf…

蒙特卡洛模拟 详解

蒙特卡洛模拟详解 蒙特卡洛模拟&#xff08;Monte Carlo Simulation&#xff09; 是一种利用随机抽样和统计计算来模拟复杂系统或过程的方法。它尤其适用于分析不确定性、复杂数学问题以及概率分布模型。 蒙特卡洛模拟的基本原理 蒙特卡洛模拟的核心思想是通过 重复随机采样 …

代理商培训新策略:内部知识库的高效运用

在竞争激烈的市场环境中&#xff0c;代理商作为企业与终端消费者之间的关键纽带&#xff0c;其专业能力和服务质量直接影响着企业的市场表现和品牌形象。因此&#xff0c;如何对代理商进行高效、系统的培训&#xff0c;以提升其业务能力和服务水平&#xff0c;成为企业亟需解决…

C++手写PCD文件

前言 一般pcd读写只需要调pcl库接口&#xff0c;直接用pcl的结构写就好了 这里是不依赖pcl库的写入方法 主要是开头写一个header 注意字段大小&#xff0c;类型不要写错     结构定义 写入点需要与header中定义一致 这里用的RoboSense的结构写demo 加了个1字节对齐 stru…

Spring 框架中哪些接口可以创建对象

Spring 框架中哪些接口可以创建对象 在 Spring 框架中&#xff0c;向 IOC 容器中添加 Bean 主要有以下几种接口和方式。Spring 提供了不同的手段来实现对象的创建和管理&#xff0c;涵盖了不同的需求和场景。以下是几种常用的接口和方式&#xff1a; 1. BeanFactory 接口 Be…