Python 实验四 常用数据结构(2)

news2024/9/23 13:00:01

6.某企业为职工发放奖金:如果入职超过5年,且销售业绩超过15000元的员工,奖金比例为0.2;销售业绩超过10000元的员工,奖金比例为0.15;销售业绩超过5000元的员工,奖金比例为0.1;其他奖金比例为0.005.如果是入职不超过5入职不超过5年,且销售业绩超过4000的员工,奖金比例为0.045;否则为0.01。输入入职年限、销售业绩,输出奖金比例、奖金,并将奖金存放到列表中并输出该列表。入职年限(为整数)输入-1的时候结束输入,为了简化所有输入均假定正确,不需判断小于0的情况。奖金为销售业绩与奖金比例的乘积。

list=[]
while True:
    years = int(input("请输入入职年限为:"))
    if years>=5:
        num = float(input("请输入销售业绩为:"))
        if num > 15000:
            proportion = 0.2
        elif num > 10000:
            proportion = 0.15
        elif num > 5000:
            proportion = 0.1
        else:
            proportion = 0.05
        award = proportion * num
        list.append(award)
        print("奖金比例为:",proportion,"奖金为:", award)
    elif years>=0 and years<5:
        num = float(input("请输入销售业绩为:"))
        if num > 4000:
            proportion = 0.045
        else:
            proportion = 0.01
        award = proportion * num
        list.append(award)
        print("奖金比例为:",proportion,"奖金为:", award)
    else:
        print("结束输入。")
        break
        
print()
print("奖金列表为:",list)

在这里插入图片描述
7.输入5个整数放到列表list1中,输出下标及值,然后将列表list1中大于平均值的元素组成一个新列表list2,输出平均值和列表list2。请利用列表推导式解决该问题。

print("请输入五个整数")
list1 = []
for i in range(5):
    n = int(input("请输入第"+str(i+1)+"个:"))
    list1.append(n)
avg = sum(list1)/len(list1)
list2 = [i for i in list1 if i > avg]
 
print()
print("平均值为:",avg)
print("list2为:",list2)

在这里插入图片描述
8.编写程序,将由1、2、3、4这4个数字组成的每位数都不相同的所有三位数存入一个列表中并输出该列表。请利用列表推导式解决该问题。

a = [1,2,3,4]
b = [i*100 + j*10 + k for i in a for j in a for k in a if i!= j and i!= k and j!= k ]
print(b)

在这里插入图片描述
9.编写程序,给定列表[1,9,8,7,6,5,13,3,2,1],先输出原列表,删除其中所有奇数后再输出。请利用列表推导式解决该问题。

a = [1,9,8,7,6,5,13,3,2,1]
b = [i for i in a if i%2 == 0]
print(a)
print(b)

在这里插入图片描述
10.百钱买百鸡:一只公鸡5元钱,一只母鸡3元钱,三只小鸡1元钱,现在要用100元钱买100只鸡,问公鸡、母鸡、小鸡各多少只?请利用列表推导式解决该问题。

list = [(a,b,c) for a in range(0,21) for b in range(0,34) for c in range(0,301) if 5*a + 3*b + c/3 ==100 and a + b + c ==100]
print(list)

在这里插入图片描述
【实验总结】
1.集合
(1)集合的创建
集合类型的值有两种创建方式:一种是用一对花括号将多个元素括起来,元素之间用逗号分隔;另一种是用函数set(),同时此函数也可以将字符串、列表、元组等类型的数据转换为集合类型。
注意,空集合只能用set()来创建,而不能用花括号{}表示,因为Python将{}用于表示空字典。
集合中没有相同的元素,因此Python在创建集合的时候会自动删除掉重复的元素。
(2)集合的运算
①len()
len()函数返回集合中元素的个数。
②in
判断某元素是否存在于集合之中,判断结果用布尔值True或False表示。
③并集、交集
并集:创建一个新的集合,该集合包含两个集合中的所有元素。
交集:创建一个新的集合,该集合为两个集合中的公共部分。
④差集
A-B表示集合A与B的差集,返回由出现在集合A中但不出现在集合B中的元素所构成的集合。
⑤对称差
返回由两个集合中那些不重叠的元素所构成的集合。
⑥子集和超集
如果集合A的每个元素都是集合B中的元素,则集合A是集合B的子集。超集是仅当集合A是集合B的一个子集,集合B才是集合A的一个超集。
A<=B,检测A是否是B的子集;
A<B,检测A是否是B的真子集;
A>=B,检测A是否是B的超集;
A>B,检测A是否是B的真超集;
A |= B将B的元素并入A中。
(3)集合的方法
①union()、intersection()
union()方法相当于并集运算。intersection()方法相当于交集运算。
②update()
update()方法相当于集合元素合并运算,注意与union()方法的区别。
③difference()
difference()方法相当于差集运算。
④symmetric_difference()
symmetric_difference方法相当于对称差运算。
⑤issubset()和issuperset()
issubset()方法用于判断是否子集。issuperset()方法用于判断是否超集。
⑥add()
add()方法的作用是向集合中添加元素。
⑦remove()
remove()方法的作用是从集合中删除元素,如果集合中没有该元素,则出错。
⑧discard()
discard()方法的作用是从集合中删除元素,如果集合中没有该元素,也不提示出错。
⑨pop()
pop()方法的作用是从集合中删除任一元素,并返回该元素;如果集合为空,则抛出KeyError异常。
⑩clear()
clear()方法的作用是从集合中删除所有元素,变成一个空集合。
(4)可迭代(Iterable)对象与迭代器(Iterator)
①可迭代(Iterable)对象
我们知道列表、元组、字符串、字典可以用 for…in…进行遍历。从表面来看,只要可以用 for…in…进行遍历的对象就是可迭代对象,那么列表、元组、字符串、字典都是可迭代对象。实际上,如果一个对象实现了__iter__方法,那么这个对象就是可迭代(Iterable)对象。
②迭代器(Iterator)
实现了__iter__方法和__next__方法,并且可以通过__next__方法不断返回下一个值的对象称为迭代器(Iterator)。迭代器(Iterator)还可以通过内置函数next()访问下一个元素。
列表、元组、字符串、字典、集合实现了__iter__方法,但并未实现__next__方法,这些对象均不能称为迭代器(Iterator)。
我们还是可以通过调用Python内置函数isinstance()来判断一个对象是否属于迭代器(Iterator)。
虽然列表、元组、字符串、字典、集合都是可迭代(Iterable)对象而不是迭代器(Iterator),但可以通过iter()函数获得一个迭代器(Iterator)。
③相关内置函数
enumerate()
格式:enumerate(iterable, start=0)
功能:返回下标和值的enumerate对象。第1个参数表示可迭代(Iterable)对象,第2个参数表示下标的开始值,默认从0开始。
zip()
格式:zip(iter1 [,iter2 […]])
功能:将多个迭代器(Iterator)对象(或者可迭代(Iterable)对象)中的元素压缩到一起,返回一个zip对象。
同样通过帮助我们得知zip对象既是一个可迭代(Iterable)对象也是一个迭代器(Iterator)对象。
map()
格式:map(func, *iterables)
功能:把一个函数func依次映射到可迭代(Iterable)对象的每个元素上,返回一个map对象。
同样通过帮助我们得知map对象既是一个可迭代(Iterable)对象也是一个迭代器(Iterator)对象。
filter()
格式:filter(function or None, iterable)
功能:把一个带有一个参数的函数function作用到一个可迭代(Iterable)对象上,返回一个filter对象,filter对象中的元素由可迭代(Iterable)对象中使得函数function返回值为True的那些元素组成;如果指定函数为None,则返回可迭代(Iterable)对象中等价于True的元素。
同样通过帮助我们得知filter对象既是一个可迭代(Iterable)对象也是一个迭代器(Iterator)对象。
(5)推导式
①列表推导式
列表推导式(list comprehension)是Python开发时用得最多的技术之一,表示对可迭代(Iterable)对象的元素进行遍历、过滤或再次计算,生成满足条件的新列表。它的结构是在一个方括号里包含一个函数或表达式(再次计算),接着是一个for语句(遍历),然后是0个或多个for(遍历)或者if语句(过滤),在逻辑上等价于循环语句,但是形式上更简洁。
语法形式:
[function / expression for value1 in Iterable1 if condition1
for value2 in Iterable2 if condition2
……
for valuen in Iterablen if conditionn ]
②字典推导式
字典推导式和列表推导式的使用方法类似,只不过将方括号变成花括号,并且需要两个表达式,一个生成键,一个生成值,两个表达式之间使用冒号分隔,最后生成的是字典。
语法形式:
{key_expression: value_expression for value1 in Iterable1 if condition1]
for value2 in Iterable2 if condition2
……
for valuen in Iterablen if condition}
③集合推导式
集合也有自己的推导式,跟列表推导式类似,只不过将方括号变成花括号,最后生成的是集合。
语法形式:
{function / expression for value1 in Iterable1 if condition1
for value2 in Iterable2 if condition2
……
for valuen in Iterablen if conditionn }
④生成器推导式
生成器推导式用法与列表推导式类似,把列表推导式的方括号改成圆括号。它与列表推导式最大的区别是:生成器推导式的结果是一个生成器对象,是一种迭代器(Iterator);而列表推导式的结果是一个列表。
生成器对象可以通过for循环或者__next__()方法、next()函数进行遍历,也可以转换为列表或元组,但是不支持使用下标访问元素,已经访问过的元素也不支持再次访问。当所有元素访问结束之后,如果想再次访问就必须重新创建该生成器对象。
(6)序列解包
①多变量同时赋值
②一个对象值赋给多个变量
一个类似于序列结构的对象可以根据其元素的数量,一次同时为多个变量赋值。这个对象可以是一个列表、元组、字符串、zip对象、enumerate对象、map对象等可迭代对象,也可以是由字典的key或value组成的可迭代对象。
③交换两个变量的值
④切片支持序列解包
⑤使用序列解包同时遍历多个序列

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

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

相关文章

【25】核心易中期刊推荐——智能控制机器人

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…

【PWN · ret2libc】ret2libc2

ret2libc1的略微进阶——存在systemplt但是不存在“/bin/sh”怎么办&#xff1f; 目录 前言 python3 ELF 查看文件信息 strings 查看寻找"/bin/sh" IDA反汇编分析 思路及实现 老规矩&#xff0c;偏移量 offset EXP编写 总结 前言 经过ret2libc1的洗礼&a…

MyBatis介绍和MyBatis的增删改查xml配置--日志输出-查看 SQL

目录 MyBatis(简化数据库操作的持久层 框架) 官方文档 Maven 仓库 传统的 Java 程序操作 DB 分析 工作示意图 传统方式问题分析(如上) 引出 MyBatis MyBatis 工作原理示意图 MyBatis 快速入门 快速入门需求说明 创建 mybatis 数据库 - monster 表 MyBatis 快速入门 …

【需求响应】基于进化算法的住宅光伏电池系统需求响应研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

VirtualBox 安装ubuntu22.04-live-server版本

文章目录 一、安装过程二、启动过程三、测试网络连通四、设置共享文件夹 一、安装过程 1、新建一个虚拟机 2、设置名称和位置 3、设置内存大小 4、设置虚拟硬盘&#xff0c;选择现在创建虚拟硬盘 5、选择虚拟硬盘文件类型&#xff0c;这里选择VDI 6、选择存储方式&#x…

甘特图控件DHTMLX Gantt入门使用教程【引入】:dhtmlxGantt 与 ASP.NET MVC(下)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求&#xff0c;具备完善的甘特图图表库&#xff0c;功能强大&#xff0c;价格便宜&#xff0c;提供丰富而灵活的JavaScript API接口&#xff0c;与各种服务器端技术&am…

2023爱分析・可观测性平台市场厂商评估报告:乘云科技

1. 研究范围定义 IT运维是企业信息化建设中不可或缺的一环&#xff0c;其作用在于确保系统稳定性、提高效率和降低成本&#xff0c;对企业的业务生产和服务质量有着至关重要的影响。自十四五规划以来&#xff0c;随着企业数字化转型的加速推进&#xff0c;以及信创转型的大…

Spring IoC 深度学习

Io回顾 IoC 是 Inversion of Control 的简写&#xff0c;译为“控制反转”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器来管理所有 Jav…

【代码随想录】刷题Day21

1.二叉搜索树的最小绝对值 530. 二叉搜索树的最小绝对差 首先对于单个节点而言&#xff0c;其最小绝对值有两个可能 一是根节点和左节点的最右节点绝对值 二是根节点和右节点的最左节点绝对值 其实这俩条件的实现就是我们代码的关键&#xff0c;不过这题和二叉搜索树的判断殊途…

Es分布式搜索引擎

目录 一、什么是ES&#xff1f; 二、什么是elk&#xff1f; 三、什么是倒排索引&#xff1f; 四、正向索引和倒排索引的优缺点对比 五、mysql数据库和es的区别&#xff1f; 六、索引库&#xff08;es中的数据库表&#xff09;操作有哪些&#xff1f; 八、ES分片存储原理 …

AutoCV第七课:ML基础

目录 ML基础前言1. 复习sqrt函数2. 线性回归预测房价2.1 问题分析2.2 代码实现2.3 总结 个人总结 ML基础 前言 手写AI推出的全新保姆级从零手写自动驾驶CV课程&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考。 本次课程主要学习复习 sqrt 函数和线性回归预测房…

Java开发手册-8

Java开发手册-8 MySQL 数据库SQL语句ORM映射 工程结构应用分层二方库依赖 MySQL 数据库 SQL语句 【强制】不要使用count(列名)或count(常量)来替代count(*)&#xff0c;count(*)是SQL92定义的标准统计行数的语法&#xff0c;跟数据库无关&#xff0c;跟NULL和非NULL无关。 说…

深入了解云计算:发展历程、服务与部署模型、未来趋势与挑战

开篇博主 bluetata 的观点&#xff1a;PaaS 服务必将是未来10年云计算权重最高的趋势&#xff08;05/02/2023 15:32&#xff09; 文章目录 一、前言二、认识了解云计算2.1 什么是云计算2.1.1 维基百科上的云计算定义2.1.2 NIST 标准云计算定义2.1.3 如果被面试如何解释云计算 2…

177_模型_Power BI 进销存6大日期维度期初与期末

177_模型_Power BI 进销存6大日期维度期初与期末 一、背景 在经销存报表设计中&#xff0c;经常会遇到的便是期初与期末。当然我们这里说期初与期末指的是期初库存与期末库存。 这里的期一般常见的会有&#xff1a;年月日。本案例将演示 6 大日期维度&#xff0c;分别是&…

(二)运行微信小程序:单页面和多页面

使用微信开发者工具创建项目后&#xff0c;默认将运行一个单页面的小程序&#xff0c;运行效果和文件对应修改处如下。 根据上图&#xff0c;通过修改对应内容&#xff0c;可以修改界面显示的文字。 这是一个单页面的小程序&#xff0c;假如要实现多页面的小程序&#xff0c;我…

基于matlab使用被动声纳系统定位声学信标

一、前言 此示例演示如何模拟被动声纳系统。固定的水声信标由浅水通道中的拖曳无源阵列检测和定位。声信标以每秒 10.37 千赫兹的速度传输 5 毫秒脉冲&#xff0c;并建模为各向同性投影仪。定位器系统在表面下方拖曳一个无源阵列&#xff0c;该阵列被建模为均匀线性阵列。一旦检…

电磁兼容三要素和三规律

EMC是业界的一个难点&#xff1b;来谈谈EMC三个规律、EMC问题三要素、电磁骚扰的特性、以及五层次EMC设计法。 EMC改进要如诊治疾病一样对症施治&#xff1b;我们倡导坚持EMC规律&#xff0c;趁早考虑和解决EMC问题-进行EMC设计。下面我们认识以下EMC领域的三个要 素和三个重要…

二十四、SQL 数据分析实战(12个简单的SQL题目)

文章目录 题目1: "双十一"活动的电商GMV分析题目2: 网站访问量分析题目3: 用户购物信息统计题目4: 连续售出的商品题目5: 奇偶互换位置题目6: 商品销量同环比题目7: 文本记录连接题目8: 行列互换题目9: 寻找符合要求的订单题目10: 优惠券使用分析题目11: 员工绩效考核…

国产仪器 3986A/3986D/3986E/3986F/3986H噪声系数分析仪

3986系列噪声系数分析仪产品包括3986A(10MHz&#xff5e;4GHz)、3986D(10MHz&#xff5e;18GHz)、3986E(10MHz&#xff5e;26.5GHz)、3986F(10MHz&#xff5e;40GHz)和3986H(10MHz&#xff5e;50GHz)&#xff0c;具有频率覆盖范围宽、频段选择灵活、接收灵敏度高、用户界面友好…

玩客云直刷armbian自带宝塔7.5

文章目录 前言一、短接玩客云1.1、流程1.2、短接操作 二、获取固件底包2.1、下载固件2.2、刷入成功后获取ip地址2.3、登陆2.4、其他 总结 前言 一开始25买了一个玩客云&#xff08;主机电源&#xff09;玩玩&#xff0c;成功刷入armbian&#xff0c;但是就是安装不了宝塔&…