第四阶段 组合数据类型
实验一 列表的基本操作
第1关:列表增删改:客人名单的变化
任务描述
列表是由按一定顺序排列的元素组成,其中的元素根据需要可能会发生变化。其中,列表元素的添加、删除或修改等是最常见的操作。下面以一则请客的故事来说明列表元素操作的应用场景。
有个人邀请几个朋友吃饭,初步拟定了一个客人名单列表guests=['Zhang san','Li si','Wang wu','Zhao liu']。后面因为一些临时情况,这个客人名单不断变化:
Zhao liu说要带他的朋友Hu qi一起来。
Zhang san因临时有事不能来了。
Wang wu说由他的弟弟Wang shi代他赴宴。
最终的客人名单列表如下:
['Li si','Wang shi','Zhao liu','Hu qi']
本关要求对一个给定的列表进行增、删、改等操作,并输出变化后的最终列表。
# coding=utf-8
# 创建并初始化Guests列表
guests = []
while True:
try:
guest = input()
guests.append(guest)
except:
break
# 请在此添加代码,对guests列表进行插入、删除等操作
###### Begin ######
deleted_guest=guests.pop(-1)
guests.insert(2,deleted_guest)
del guests[1]
print(deleted_guest)
print(guests)
####### End #######
第2关:排序:给客人排序
任务描述
一般情况下我们创建的列表中的元素可能都是无序的,但有些时候我们需要对列表元素进行排序。
例如,对参加会议的专家名单,我们需要根据专家姓名按照首字母从小到大或者从大到小的顺序进行排序。例如我们想将如下的客人guests列表中的五个名字元素['zhang san','li si','wang wu','sun qi','qian ba']分别按照首字母从小到大的顺序和从大到小的顺序分别排序。排序后的输出分别为:
['li si','qian ba','sun qi','wang wu','zhang san']
['zhang san','wang wu','sun qi','qian ba','li si']
本关要求就是学会列表排序相关操作的使用方法,实现对列表元素的排序。
#coding=utf-8
# 创建并初始化`source_list`列表
source_list = []
while True:
try:
list_element = input()
source_list.append(list_element)
except:
break
# 请在此添加代码,对source_list列表进行排序等操作并打印输出排序后的列表
#********** Begin *********#
source_list.sort()
print(source_list)
#********** End **********#
第3关:数值列表:用数字说话
任务描述
在数据可视化的背景下,数字列表在Python列表中的应用十分广泛,列表十分适合存储数字集合。本关目标是让读者掌握一些处理数字列表的基本方法,主要包括数字列表的创建、对数字列表进行简单的统计运算等。
例如我们要创建一个从2到10的偶数的数字集合,然后计算出该集合的数值之和。
data_set = [2,4,6,8,10]
sum=30
本关要求能够利用合适方法快速创建数字列表,并能够对列表中的元素数值进行简单的统计运算。
#coding=utf-8
# 创建并读入range函数的相应参数
lower = int(input())
upper = int(input())
step = int(input())
# 请在此添加代码,实现编程要求
###### Begin ######
list_a=list(range(lower,upper,step))
print(len(list_a))
print(max(list_a)-min(list_a))
####### End #######
第4关:列表切片:你的菜单和我的菜单
任务描述
我们在前三关中学习了如何处理单个列表元素和所有列表元素,在这一关中我们还将学习如何处理部分列表元素——Python
中称为切片。
例如,当我们去餐馆吃饭点菜时,你的菜单和我的菜单有些时候是一模一样,也有些时候是部分菜名一样。那么如何根据我已经点好的菜单生成你的菜单呢?
本关通过菜名列表的部分复制,让读者了解并掌握列表切片的基础知识。
# coding=utf-8
# 创建并初始化my_menu列表
my_menu = []
n=0
while True:
try:
food = input()
my_menu.append(food)
n+=1
except:
break
# 请在此添加代码,对my_menu列表进行切片操作
###### Begin ######
print(my_menu[0:n+1:3])
print(my_menu[-3:])
####### End #######
实验二 列表的应用
第1关:欧拉筛法求素数
任务描述
本关任务:编写一个欧拉筛法求素数的小程序。
相关知识
为了完成本关任务,你需要掌握:1.了解欧拉筛法,2.如何处理列表。
n=eval(input())
#代码开始
l = list(range(2,n+1))
for x in l:
for y in range(2*x,n+1,x):
if y in l:
l.remove(y)
#代码结束
print(l)
第2关:统计文档中诗人列表
任务描述
本关任务:编写一个程序,将文档《中学诗词》中作者的姓名加入一个列表,按作者的姓名排序。显示列表中作者的序号和姓名。 如图所示,标题行显示诗名(或词名空格词牌名)、空格、作者 注意:其他行也可能包含空格,但标题行不包含逗号、句号、感叹号
相关知识
为了完成本关任务,你需要掌握:1.如何打开文件,2.如何遍历文件。 3.如何处理字符串 4.如何向列表中添加信息 5.如何对列表排序。
f1=open("sy8//中学诗词.txt","r",encoding='utf-8')
zj=[]
#代码开始
for line in f1.readlines():
line=line.strip()
if ',' not in line and '。'not in line and '!' not in line and ' ' in line:
a=line.rfind(' ')
b=line[a+1:]
if b not in zj:
zj.append(b)
zj.sort()
#代码结束
for i in range(1,len(zj)+1):
print(i,zj[i-1])
f1.close()
第3关:使用列表求解约瑟夫环
任务描述
本关任务:编写一个使用列表求解约瑟夫环的问题
约瑟夫问题可以这样描述:n个人按1,2,3,… ,n编号,并顺序围坐一圈。开始按照1,2,3,… ,m 报数,凡报到 m 的出列。直到所有人出列为止。 下图模拟n为8m为4的出列顺序
相关知识
为了完成本关任务,你需要掌握:1.约瑟夫环的算法2.列表的操作
约瑟夫环的算法
建立一个列表lb存放n个值 遍历该列表,从1开始计数,到第m个值将其从列表删除。然后继续从1开始计数,数到第m个值将其从列表删除。 以此类推,直到列表中没有元素为止
x=[]
n=eval(input("输入人数"))
k=eval(input("输入序号"))
#代码开始
t=0
for i in range(1,n+1):
x.append(i)
for j in range(n):
t=(t+k-1)%len(x)
item=x.pop(t)
print(item)
#代码结束
第4关:两数之和
任务描述
本关任务: 对于一个不包含重复数字的有序列表 [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 18, 19, 20, 21, 29, 34, 54, 65]
从键盘输入n,查找是否有两数之和等于n,若有则返回两数的下标(找到一组即可且要求其中的一个数尽量小),若所有数均不满足条件则输出“not found”。
lst1=[1,4,5,6,7,8,9,10,11,12,13,15,18,19,20,21,29,34,54,65]
n=eval(input("请输入n"))
#代码开始
l=len(lst1)
for i in range(l):
a=lst1[i]
b=n-a
if b in lst1:
print(f'{i} {lst1.index(b)}')
break
else:
print('not found')
#代码结束
第5关:用户数据的增加、删除、查询
任务描述
用户列表和密码列表如下所示 yhlb=["mary","harry","mike","tom","rose"]
mmlb=["123456","888888","999999","765432","678901"]
补充程序,实现对用户和密码列表进行增加、删除、查询。 程序显示菜单如下 请选择 1 用户增加 2 用户删除 3 用户查询 4 退出系统
当用户输入1 输入用户姓名和密码后,若用户在列表中,显示用户已存在 无法增加。 若不存在,则将用户名和密码追加到相应的列表中。并显示用户已增加。
当用户输入2 输入用户姓名后, 若用户不在列表中,显示用户不存在 不能删除。若在列表中,则将用户名和密码删除,并显示用户已删除。
当用户输入3 输入用户姓名后, 若用户不在列表中,显示用户不存在 不能查询。若在列表中,则显示密码。
当用户输入4,则退出循环
yhlb=["mary","harry","mike","tom","rose"]
mmlb=["123456","888888","999999","765432","678901"]
print("""请选择
1 用户增加
2 用户删除
3 用户查询
4 查看数据,退出系统""")
#代码开始
while True:
a=eval(input('请输入'))
if a==1:
name=str(input('请输入用户名'))
mima=eval(input('请输入密码'))
if name in yhlb:
print('用户已经存在 无法增加')
else:
yhlb.append(name)
mmlb.append(mima)
print('用户已增加')
elif a==2:
name=str(input('请输入用户名'))
if name in yhlb:
a=yhlb.index(name)
yhlb.remove(name)
mmlb.remove(mmlb[a])
print('用户已删除')
else:
print('用户不存在 无法删除')
elif a==3:
name=str(input('请输入用户名'))
if name in yhlb:
a=yhlb.index(name)
print('密码'+mmlb[a])
else:
print('用户不存在')
elif a==4:
break
#代码结束
for i in range(0,len(yhlb)):
print("用户名{:6}密码{:6}".format(yhlb[i],mmlb[i]))
实验三 元组
第1关:日期格式转换
任务描述
本关任务:编写一个能转换日期格式的小程序。 输入一个数字的日期格式 2020/1/23 转换为美式格式和英式格式
相关知识
为了完成本关任务,你需要掌握:日期格式
日期格式
英式日期格式:日,月,年 美式日期格式:月,日,年 具体举例如下: 8 March,2004(英式) March 8,2004(美式)
x=input("输入日期")
#开始
a=x.find('/')
b=x.rfind('/')
n=x[:a]
y=x[a+1:b]
r=x[b+1:]
python={'1':'January','2':'February','3':'Mar','4':'April','5':'May','6':'Jun',
'7':'July','8':'August','9':'September','10':'October','11':'November','12':'December'}
#结束
print("美式格式"+python[y]+' '+r+','+n)
print("英式格式"+r+' '+python[y]+','+n)
第2关:计算购买饮品金额
任务描述
本关任务:编写一个计算购买饮品金额的小程序。
相关知识
为了完成本关任务,你需要掌握:1.如何对元组的各值循环 2.访问二维元组的值
对元组的各个值循环
for 变量 in 元组: 循环体 变量依次取出元组的各个值,执行循环体
访问二维元组的值
访问元组的i行j列的值
元组[i][j]
cp=(("悠哉悠哉",18),("人间烟火",17),("蔓越阑珊",17),("抹茶葡提",16),("幽兰拿铁",16),(" 翠翠 ",13),("浮生半日",15),("筝筝纸鸢",16),("声声乌龙",15),("风栖绿桂",12),("素颜锡兰",13),("烟火易冷",15))
#代码开始
l=len(cp)
j=0
for i in range(l):
b=cp[i]
name=b[0]
money=b[1]
print('{:2}{}{}'.format(i+1,name,money))
while True:
a=eval(input('请选择饮品'))
if a==0:
break
else:
e=eval(input('请输入数量'))
c=cp[a-1]
j=c[1]*e+j
print('应付{}元'.format(j))
第3关:判断句子是否每个英文字母起码出现一次
任务描述
本关任务:编写一个判断输入的英文句子是否个每个英文字母起码出现一次的小程序。 英文中有一种句子,句子中所有英文每个字母至少出现一次,例如The quick brown fox jumps over the lazy dog. 编写一个程序,用来检查一个英文句子是否是符合这个条件.是则显示True 否则显示False(提示 利用集合)
相关知识
为了完成本关任务,你需要掌握:集合的操作
集合的操作
设置集合为空集合 jh=set()
集合jh增加一个元素x jh.add(x)
集合元素的个数 len(jh)
x=input("")
#代码开始
jh=set()
x=x.lower()
for i in x:
if 'a'<=i<='z':
jh.add(i)
if len(jh)==26:
print('True')
else:
print('False')
#代码结束
第4关:集合的运算
任务描述
本关任务: 商场举办双节答谢活动,有两项活动可以参加 报名参加活动1的会员编号放在集合1中 报名参加活动2的会员编号放在集合2中 将同时参加两项活动的会员编号,只参加活动1的会员编号,只参加活动2的会员编号分别显示出来
相关知识
为了完成本关任务,你需要掌握:集合的运算
集合的运算
差 S –T 返回一个新集合,包括在集合S中但不在集合T中的元素 交 S & T 返回一个新集合,包括同时在集合S和T中的元素 并 S|T 返回一个新集合,包括集合S和T中所有元素 补 S^T 返回一个新集合,包括集合S和T中元素,但不包括同时在其中的元素
hd1=set()
hd2=set()
gh=input("")
lb=gh.split(',')
for x in lb:
hd1.add(eval(x))
gh=input("")
lb=gh.split(',')
for x in lb:
hd2.add(eval(x))
#代码开始
hd3=hd1&hd2
hd4=hd1-hd2
hd5=hd2-hd1
#代码结束
print("两项活动都参加",hd3)
print("只参加活动1",hd4)
print("只参加活动2",hd5)
实验四 字典
第1关:元组的使用:这份菜单能修改吗?
任务描述
元组看起来犹如列表,但元组使用圆括号()
而不是[]
来标识,而且列表的元素可以修改,但元组的元素不能修改。本关介绍元组的常见使用方法以及元组和列表的使用区别。下面用饭店菜单的例子来说明列表和元组使用的应用场景:
现在有一个餐馆要向每个包厢都投放两份菜单,菜单上有4种菜名。我们想将两个菜单上最后一道菜名互换一下,也想快速知道改变后的两份菜单上单词首字母最大的菜名。而我们首先需要判断该用列表的方法还是元组的方法实现这个目标。为了实现这个目标,我们需要先学习元组的相关使用知识以及元组与列表的区别。
相关知识
元组与列表
元组与列表很相似,两者之间的差别在于:
- 列表在初始化后其中的元素还可以进行增删改等操作,但是元组在初始化后其中的元素不能进行更改;
- 列表在赋值时使用方括号
[]
,而元组在赋值时使用小括号()
。
因为元组具有不可变的特性,所以在能用元组替代列表的地方最好都使用元组,这样代码更安全。
# coding=utf-8
# 创建并初始化menu_list列表
menu_list = []
while True:
try:
food = input()
menu_list.append(food)
except:
break
# 请在此添加代码,对menu_list进行元组转换以及元组计算等操作,并打印输出元组及元组最大的元素
###### Begin ######
menu_list1=tuple(menu_list)
menu_list2=[]
for x in menu_list1:
menu_list2.append(x[0])
a=menu_list2.index(max(menu_list2))
print(menu_list1)
print(menu_list1[a])
####### End #######
第2关:字典的使用:这份菜单可以修改
任务描述
字典和列表一样,都是 Python 中十分重要的可变容器模型,都可以存储任意类型元素。我们将以菜单的例子来说明字典使用的基本知识,餐馆的菜单上不仅包含菜名,菜名后面还必须包含该道菜的价格。如果要用列表实现,就需要两个列表,例如&#
标签:Python,list,元组,头歌,实训,print,input,列表,本关 From: https://blog.csdn.net/qq_63961628/article/details/142462091