python第四天

news/2025/10/13 9:39:09/文章来源:https://www.cnblogs.com/jipeitao/p/19137753

https://pythontutor.com/render.html#mode=display
image

1 3 5 2n-1
image

for i in range(1,4): #1 2 3
for j in range(3-i):
print(" ",end="")
for j in range(2i-1):
print("
",end="")
print()
for i in range(1,-1,-1): #1,0
for j in range(2-i): # range(0,2) # 0 1
print(" ",end="")
for j in range(2i+1):
print("
",end="")
print()

容器:复杂数据类型 列表 、字典、元组

代码存储在硬盘,运行是在内存
栈内存:特点 先进的后出 临时存储的数据 局部变量
堆内存:特点 长期存储的数据 读写速度慢,但稳定(对象、列表)

常量区
小整数常量池
短字符串:没有特殊字符 默认认为可能后期会经常使用 放到常量区(一定是短字符串才会存储在常量区)
image

字符串、整数 不可变数据类型 一旦创建,不能更改
image

改了数据,会新开辟一块区域,id也会变 ,旧的值会有垃圾回收机制

全局变量在堆内存中
局部变量在栈内存中

小整数常量池的范围:-5~256

同学的姓名存储下来

Name1=”zhangsan”
Name2=”lisi”
Print(name3)
每个变量只能存储一个数据

容器:同时装多个数据,并且数据类型是不限制的

列表:和其他语言的数组比较像.有序的可变的元素集合 python列表中的元素可以是混合数据类型

列表是一个动态数组。存储的是真实元素的引用、可迭代
List1=[“1”,”2”,”3”,”4”]
List2=[“zhangsan”,12,”wangwu,True]

image
image

列表的创建

image
image
image
image
image

正向索引从左往右从0开始
逆向索引从右往左从-1开始 -1 -2
列表名[索引下表]
image

List1=[1,2,3,4,5,6,7,8,9]

切片:获取某一段序列

列表名[start🔚step]

1:4 取左不取右 1 2 3

Print(list1[1:4])
Print(list1[:4]) #0 1 2 3
Print(list1[:] #全切
Print(list1[4:]) #从下标为4的位置开始,一直切到列表的末尾

下标为偶数的元素切出来 注意下标是从0开始的

Print(list1[::2]

Start值加上步长要慢慢接近end值

练习:
list1=[1,2,3,4,5,6,7,8,9]
print(list1[1:4])
print(list1[:4])
print(list1[:])
print(list1[4:])
print(list1[::2])
print(list1[7:4:-2])

修改列表中的元素值

直接赋值的方式

List1[1]=24
Print(id(list1))
Print(list1)
内存地址没有变,值改变了

拼接

List1=[1,2,3]
List2=[“zhangsan”,’list”]
Print(list1+list2)
Print(list13)
Print(“=”
30)
Print(“zhangsan” in list2) #前面的元素是否存在后面list2列表中
True #存在

对象:属性和方法

dir() 查看对象的属性和方法

Print(dir(list1))
image

前后带__不用关注
image

append在末尾追加单个元素

extend() 在末尾追加多个元素

List1.extend([“zhangsan”,”lisi”,”wangwu”])
Print(list1)

insert() 在指定的位置插入元素

list=[1,2,3]

help(list1.insert)

list1.insert(1,”zhangsansimida”) 在指定的位置插入元素

pop删除指定元素,并且会返回删除的元素

a = list1.pop(2)
Print(a)
Print(list1)

删除的是第一个满足匹配的元素

a = list1.remove(2)
print(a,list1)

clear 把所有列表全部清空

count 统计某个元素出现的次数

Print(list1.count(2))

index 找索引。返回的是第一个满足匹配的元素的下标

Print(list1.index(2))

sort 排序

list1.sort() 默认是升序,加上reverse=True就变成降序了
Print(list1)

加上reverse=True 降序

List1.sort(reverse=True)

Print(list1)

reverse 翻转,倒序了

List1.reverse()
Print(list1)

练习题:
image

提示:用for循环可以将列表遍历
list1=[3,-5,7,0,-2,9,1]
sum = 0

for循环主要是遍历序列的

for i in list1:
#print(i)
if i >0:
sum+=i
else:
pass
if sum>0:
print(f"正数之和是{sum}")
else:
print(("没有正数"))

list1 = [1,2,2,3,4,4,4,5]
newlist=[] #生成空列表
for i in list1:
if i not in newlist:
newlist.append(i)

\n换行 end="\n" 换行符

print(f"去重前列表:{list1}\n,去重后的列表:{newlist}")

拷贝 copy()

更改数据,备份 列表

错误的,引用指向的是同一个对象

list1=[1,2,3] #list1存放的是内存地址 0x123,相当于把引用拷贝了一份
list2=list1
print(id(list2),id(list1))

list2=list1[:] #属于前拷贝,如果里面有内层列,内层列拷贝的还是内存地址
print(id(list1),id(list2))
image
image

深拷贝:创建完全独立的新列表,包括内层的列表也完全独立

List1(1,2,3)
Import copy
List2=copy.deepcopy(list1)

改list2这时,list1不受影响

List2[-1][0]=”南航”
Print(list2)
Print(list1)

Copy.copy 是前拷贝
List2=list1.copy() 也是前拷贝

List2=list1 不叫拷贝,只是把引用地址拷贝了一下

列表推导式

普通方法:
image

列表推导式最基础的格式:字符串、列表、range生成的序列
image

练习:
image

list2=[i for i in range(2,101,2)]
print(list2)

list2=[i+10 for i in [1,2,3,4,5]]
print(list2)

加一个判断,符合的才会输出
list2=[i for i in range(101) if i % 2 ==0]
print(list2)

例子:
image

numbers=[i for i in [12,3,45,7,8,90,1] if i>10]
print(numbers)

image
image
image

全局的函数

len() 返回列表长度

list1 = [1,2,3,4,5]
print(len(list1))

min() max() 最小值 最大值

print(min(list1))
print(max(list1))

sum 求和

print(sum(list1))

元组:不可变的、有序的数据类型
Tuple1=(1,2,3,4,”zhangsan”)
Print(type(tuple1))
<class ‘tuple’> #tuple就是元组
image

Tuple1=(“zhangsan”,”list”)
Print(tuple1[0])

元组不支持被修改

Tuple1[0]=”nanhang”

image
image
image
image
image
image

元组结构赋值:
image

列表强制转换成元组
元组强制转换成列表
image

集合:特点是无序,没有索引下标、并且内部元素不可重复
{元素1,元素2,......}
Set1={1,2,2,12,12,} #存储其实是无序的
Print(set1) #结果会去重
image
image
image

空集合用set函数
image

添加:是无序的
image

添加多个元素:update
image

删除元素:
image

如果不存在,报错,discard删除不会报错,remove会报错
image

pop() 随机删除

clear() 清空

某个元素是否存在于集合当中

Print(“延大” in set1)
结果是True或者False

并集

Set1={1,2,3}
Set2={3,4,5}
Print(set1 | set2) #表示的就是并集
或者
Print(Set1.union(set2))

交集 &

image

差集

image
image

结果是无序的:
image

字典:是以键值对的方式存储数据的 [120,130,110]

”语文”:110,”数学”:120

字典的外围也是{}
image

双引号里面是字符串
键一定是一个不可变数据类型
image

取值:
image
image

整数也可以作为键,不一定非得是字符串才能做键
image

Get取值
image
image
image

添加:
image

删除:这里面的1是键名
image

Pop删除,会有提示删除了谁:
image

Clear() 清空

Keys可以把所有键值遍历
Values可以把所有值取出来
Items 以元组的形式展示出来
image

字典的遍历:
image

字典推导式

image
image

取值:
image

列表 元组 集合 字典 :每个的特点

练习题:

大作业:班级成绩数据管理系统

背景:假设你是数学老师,需要管理班级学生的多门数学相关成绩(如单元测验、期中、期末成绩,均为整数)。本作业要求实现成绩的录入、查询、修改、删除及统计分析

一、核心数据结构

字典列表存储学生信息,所有数据均为整数(无字符串),初始预设3-5条数据,示例:

# 学生数据格式:id为唯一整数标识,scores为整数列表(存储多门成绩)
students = [{"id": 1, "scores": [85, 90, 88]},  # id=1的学生,3门成绩分别为85、90、88{"id": 2, "scores": [79, 82, 91]},{"id": 3, "scores": [95, 89, 92]}
]

二、必做功能需求(共7项)

1. 菜单交互框架

程序启动后,通过print显示固定菜单(菜单文字为字符串常量,不涉及字符串方法),用户输入1-6的整数选择功能,执行后返回菜单(选6则退出)。菜单格式:

班级成绩管理系统
1. 查看所有学生成绩
2. 添加新学生
3. 修改学生成绩
4. 删除学生
5. 成绩统计分析
6. 退出系统
请输入功能编号(1-6):

2. 查看所有学生成绩

遍历students列表,按固定格式打印每个学生的id和成绩(用print直接输出整数和列表,不拼接字符串)。示例输出:

所有学生成绩:
id: 1  成绩: [85, 90, 88]
id: 2  成绩: [79, 82, 91]
id: 3  成绩: [95, 89, 92]

3. 添加新学生

步骤(全程用整数输入,不处理字符串):

  1. 提示用户输入“新学生id(整数)”;
  2. 遍历students列表,检查该id是否已存在(对比字典的"id"键值):
    • 若存在:打印“id已存在,添加失败”;
    • 若不存在:提示用户输入“成绩数量(整数,至少1)”,再逐个输入对应数量的成绩(每个成绩为整数),组成scores列表,最后创建新字典{"id": 输入id, "scores": 成绩列表}并添加到students,打印“添加成功”。

4. 修改学生成绩

步骤:

  1. 提示用户输入“要修改的学生id(整数)”;
  2. 遍历students列表,检查id是否存在:
    • 若不存在:打印“未找到该学生,修改失败”;
    • 若存在:提示用户输入“新的成绩数量(整数)”,再逐个输入新成绩(整数),替换该学生字典的"scores"值,打印“修改成功”。

5. 删除学生

步骤:

  1. 提示用户输入“要删除的学生id(整数)”;
  2. 遍历students列表,检查id是否存在:
    • 若不存在:打印“未找到该学生,删除失败”;
    • 若存在:用remove()方法从students中删除该学生字典,打印“删除成功”。

6. 成绩统计分析

计算并打印4项结果(均为数值运算,无字符串处理):

  1. 班级总人数:直接用len(students)获取;
  2. 平均总分
    • 先遍历每个学生,计算其scores列表的总和(sum(学生["scores"])),存到“总分列表”;
    • 用“总分列表的总和 ÷ 总人数”,结果保留1位小数(用round()函数);
  3. 最高分学生
    • 从“总分列表”中找最大值(max(总分列表));
    • 遍历学生列表,找出所有总分等于该最大值的学生,打印其id和总分;
  4. 按总分排名
    • 创建“(id, 总分)”元组列表(如[(1, 263), (2, 252), ...]);
    • sorted()按“总分从高到低”排序(key=lambda x: x[1]reverse=True);
    • 按“排名X:id=X,总分=X”格式打印(用print直接输出整数)。

示例输出:

成绩统计分析:
1. 班级总人数:3
2. 平均总分:261.7
3. 最高分学生(总分276):id=3,总分=276
4. 按总分排名:排名1:id=3,总分=276排名2:id=1,总分=263排名3:id=2,总分=252

7. 退出系统

用户输入6时,打印“系统退出,再见!”,用break终止程序。

三、进阶功能(选做,加分项)

  1. 按科目查平均分:提示用户输入“科目序号(从1开始,如1表示第一门成绩)”,遍历所有学生的scores列表,提取对应序号的成绩,计算平均分(保留1位小数);
  2. 成绩去重:在“添加”和“修改”功能中,对输入的成绩列表去重(如输入90, 85, 90,处理后为[90, 85]),用集合实现(list(set(成绩列表)),再按输入顺序调整);
  3. 批量添加学生:提示用户先输入“要添加的学生数量(整数n)”,再依次输入n个学生的id和成绩(每个学生先输id,再输成绩数量和逐个成绩),批量添加(id存在则跳过)。

四、提交要求

  1. 代码注释:关键逻辑(如查id、统计总分、排序)需加注释,说明操作目的;
  2. 无字符串方法:代码中不得出现任何字符串对象的方法(如split()len("abc")"a" + "b"等,允许用print输出字符串常量);
  3. 知识点说明:在代码末尾用注释列出用到的知识点(如“列表的append/remove、字典的键值访问、for/while循环、if条件判断、sum/len/max/sorted函数、算术运算符、比较运算符”等)。

设计思路提示

  1. 输入处理:所有用户输入均用int(input())直接转为整数,避免对输入的字符串做任何处理(如用户输入“3”,直接用int(input())得到3);
  2. 功能拆分:将每个功能写成函数(如show_students()add_student()),菜单选择时调用,减少重复代码;
  3. 查id复用:写一个辅助函数get_student(target_id),遍历students返回对应学生字典(或None),供添加、修改、删除功能复用;
  4. 排名实现:用sorted()对“id-总分”元组列表排序,通过enumerate()获取排名序号(从1开始)。

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

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

相关文章

Win10如何彻底关闭自动更新

Win10如何彻底关闭自动更新 一、禁用Windows Update服务1、通过键盘Win + R健,弹出运行对话框,输入命令 services.msc ,按“确定”按钮,即可打开服务弹窗,并双击“Windows Update”。 2、点击“停止”,将…

2025 年国内最新漏水维修公司推荐:涵盖厨卫 / 屋顶 / 管道 / 高空等场景,帮您精准选靠谱维修团队

漏水问题是建筑使用中的 “顽疾”,小到住宅厨卫渗水、阳台漏水,大到商业建筑管道破损、高空外墙渗漏,不仅会损坏装修、影响日常生活,长期不修复还可能危及建筑结构安全,造成高额经济损失。然而当前漏水维修市场乱…

25.10.13 C语言 运算符

运算符:运算符结合性优先级() [] -> .左1! ~ ++ -- +(单目,正号) -(单目,负号) *(解引用运算符) &(取地址运算符) (类型) sizeof右2*(乘法) / %左3+(双目,加法) -(双目,减法)左4<< &…

matlabe东向偏移、北向偏移、垂直偏移转经纬度

1.代码function [target_lat, target_lon, target_alt] = relative2geodetic(ref_lat, ref_lon, ref_alt, east_offset, north_offset, up_offset) % 将相对偏移转换为地理坐标系 % 输入: % ref_lat, ref_lon, ref_…

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名媒体系统生态需求洞察

本文深入分析某知名开源媒体系统的插件生态,揭示其丰富的功能特性和应用场景,涵盖智能播放列表、多平台同步、界面定制等核心功能,展现了一个成熟开源项目的完整生态体系。a.内容描述核心功能定位:该项目是一个专注…

2025 年立体画厂家最新推荐榜单:涵盖 3d 光栅立体画、立体光栅卡、3D 装饰立体画、三维立体画,助力企业与消费者精准挑选优质品牌

当前,立体画行业发展迅猛,市场上品牌数量激增,涵盖 3d 光栅立体画、立体光栅卡、3D 装饰立体画、三维立体画等多个品类。然而,众多品牌中产品质量参差不齐,部分品牌技术水平落后,服务保障缺失,导致企业在采购用…

修改Windows10的TLS版本和Ciphers加密算法 导致 sql server 2008 连接不上

服务器是Windows10 sql server 2008 ,安全扫描出漏洞,要求禁用TLS1.0 和一些 旧的加密算法 使用IISCrypto.exe 发现服务器目前是这样的 然后点击左下角的 Best Practices,然后点击apply,重启服务器,然后sql s…

20232403 2025-2026-1 《网络与系统攻防技术》实验一实验报告

20232403 2025-2026-1 《网络与系统攻防技术》实验一实验报告 1.实验内容 本次实验围绕一个pwn20232403,通过三种不同的方式,调用getShell函数。包括直接修改可执行文件本身、利用foo函数中的缓冲区溢出漏洞和注入一…

2025 年板材厂家推荐:兔宝宝以绿色创新筑根基,全链服务护健康家居需求

行业背景在 “双碳” 战略深化与城市旧改浪潮的双重推动下,中国板材产业正加速从规模竞争转向价值竞争,2025 年行业 CR10(前十大品牌市占率)已达 47.3%,绿色环保、智能生产成为核心竞争维度。消费者对健康家居的需…

基于SC译码算法的极化码解码实现与优化

1. SC译码算法原理与核心流程 串行抵消(Successive Cancellation, SC)译码是极化码的基本解码算法,其核心思想是通过递归消除已译码比特的影响,逐比特推断信息。主要步骤如下:初始化:根据接收信号计算初始似然比…

idea远程连接并本地打包到远程服务器

开发环境需要把本地的jar包打包并部署到远程服务器,idea自带远程连接。记录一下 1.idea 工具- 部署 - 配置 2.点击 左上角的 添加按钮,输入服务器地址 以及 根路径,映射则配置本地的target目录 如下3.连接成功后…

2025 年快速退火炉优质厂家最新推荐榜单:真空 / 半导体 / 晶圆 / 高温 / 桌面 / 半自动 / 全自动 / 芯片 / 硅片 / RTP 设备企业核心竞争力全面解析

当前,3C、半导体、光伏、汽车等行业迅猛发展,对快速退火炉的需求持续增长,但其市场现状却存在诸多痛点。不少厂家缺乏核心技术,产品性能不稳定,难以满足高精度生产需求;市场上厂家数量繁杂,质量参差不齐,用户面…

2025 年窗帘品牌最新推荐权威排行榜:精准剖析各品牌优势,定制 / 设计领先 / 家居等多类型窗帘优选母婴/遮光/智能/蕾丝/百叶/阳台/隔音/卷帘窗帘厂家推荐

在当前家居软装市场中,窗帘作为提升空间格调与保障生活舒适度的关键单品,其品牌选择愈发受到消费者重视。然而,市场上窗帘品牌数量繁杂,既有深耕多年的老牌企业,也有不断涌现的新兴品牌,产品质量、工艺水准与服务…

ElasticSearch基础入门和基本概念 - 详解

ElasticSearch基础入门和基本概念 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

电子合同时代来了!推荐一款人人都能用得起的电子合同系统,虽然现在电子合同平台很多,但成本都不低,现推荐一款可能是成本z低的电子合同签署系统,套餐没有有效期,并且可转让,用不完的永远不浪费

电子合同时代来了!推荐一款人人都能用得起的电子合同系统,虽然现在电子合同平台很多,但成本都不低,从3-7元每份价格不等,而且需要在有效期内消费,到期就归零了,对很多中小企业来说每年白白花费不少的成本,现推…

2025 年最新推荐!停车场系统厂商榜单重磅发布,涵盖管理 / 收费 / 无人值守 / 道闸 / 车牌识别系统优质服务商

当下城市化进程不断加速,车辆保有量逐年激增,停车场作为城市交通运转的关键环节,其智能化、高效化管理需求日益迫切。然而当前停车场系统市场鱼龙混杂,部分厂商技术实力薄弱,产品频繁出现识别故障、系统卡顿等问题…

2025 年汽车托运公司推荐排行榜,靠谱的汽车托运服务哪家好?推荐这五家汽车托运公司!优质企业深度解析,助您轻松选对汽车物流服务提供商全国门到门 / 仓储 / 跨境货运服务公司推荐

当前汽车产业飞速发展,跨区域购车、二手车流通、企业车辆调度等需求激增,汽车托运成为刚需。但行业乱象凸显,部分公司无正规资质、运输流程不规范,导致车辆损坏理赔难、运输时效拖延、隐性收费层出不穷,消费者和企…

3C电子企业柔性制造转型:如何依据MES管理系统完成快速换线与弹性生产?

3C电子企业柔性制造转型:如何依据MES管理系统完成快速换线与弹性生产?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

oo

ooimport numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split, KFold, cross_val_score from sklearn.linear_model imp…

实用指南:20250926的学习笔记

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …