Python列表、字典练习题
1、实验题目:好友管理系统 请设计一个好友管理系统,每个功能都对应一个序号,用户可根据提示“请输入您的选项”选择序号执行相应的操作,包括: (1)添加好友:用户根据提示“请输入要添加的好友:”输入要添加好友的姓名,添加后会提示“好友添加成功”。 (2)删除好友:用户根据提示“请输入删除好友姓名:”输入要删除好友的姓名,删除后提示“删除成功”。 (3)备注好友:用户根据提示“请输入要修改的好友姓名:”和“请输入修改后的好友姓名:”分别输入修改前和修改后的好友姓名,修改后会提示“备注成功”。 (4)展示好友:若用户还没有添加过好友,提示“好友列表为空”,否则返回每个好友的姓名。 (5)退出:关闭好友系统。
分析:这道题主要考察对于列表或字典的增删改查操作
若使用列表:
lst=[]
flag=1
def add(name):
lst.append(name)
print("好友添加成功!")
def delete(name):
lst.remove(name)
print("好友删除成功!")
def find(name):
if name in lst:
return name
return 0
def change(name,newname):
lst[lst.index(name)]=newname
print('修改成功!')
while(flag==1):
print("------1.添加好友------")
print("------2.删除好友------")
print("------3.备注好友------")
print("------4.展示好友------")
print("------5.退 出-------")
option = int(input("请输入您的选项:"))
if option==1:
name = input("输入要添加好友的名字:")
if (find(name) == 0):
add(name)
else:
print('该好友已经添加!')
elif option==2:
name=input("输入要删好友的名字:")
if(find(name)!=0):
delete(name)
else:
print('该好友暂未添加!')
elif option==3:
name=input("输入要修改好友的名字:")
if (find(name) != 0):
newname=input("输入修改后的好友的名字:")
change(name,newname)
else:
print('该好友暂未添加!')
elif option==4:
if(len(lst)==0):
print('好友列表为空!')
else:
print(lst)
elif option==5:
print("关闭好友系统!")
flag=0
else:
print("输入选项有误,请重新输入!")
注意:在进行对好友的增删改的时候,要考虑这个好友是否已经存在。
若使用字典,好友信息处理名字再增添一个手机号
dir={}
flag=1
def add(name,sno):
dir.setdefault(name,sno)
print("好友添加成功!")
def delete(name):
dir.pop(name)
print("好友删除成功!")
def find(name):
if name in dir:
return name,dir[name]
return 0
def change(newname,newsno):
dir.update(newname=newsno)
print('修改成功!')
while(flag==1):
print("------1.添加好友------")
print("------2.删除好友------")
print("------3.备注好友------")
print("------4.展示好友------")
print("------5.退 出-------")
option = int(input("请输入您的选项:"))
if option==1:
name = input("输入要添加好友的名字:\n")
sno =input("输入要添加好友的手机号:\n")
if (find(name) == 0):
add(name,sno)
else:
print('该好友已经添加!')
elif option==2:
name=input("输入要删好友的名字:")
if(find(name)!=0):
delete(name)
else:
print('该好友暂未添加!')
elif option==3:
newname=input("输入要修改好友的名字:\n")
newsno=input("输入要修改好友的手机号:\n")
change(newname,newsno)
elif option==4:
if(len(dir)==0):
print('好友字典为空!')
else:
for name,sno in dir.items():
print(name,sno)
elif option==5:
print("关闭好友系统!")
flag=0
else:
print("输入选项有误,请重新输入!")
注意: 对于字典的修改使用update()的时候,它可以修改或插入多个键值列表,update(key1=value1,key2=value2),但是需要注意的是如果把它放入一个函数里key值是不可以当成变量改变的,所以我通过第二中方式update(dir1)来进行修改。
2、实验题目:中文数字对照表 输入一个数字,转换成中文数字。比如:1234567890 -> 壹贰叁肆伍陆柒捌玖零
num=input("请输入数字:")
list1=['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']
print("转换后的结果为:")
for i in range(0,len(num)):
print(list1[int(num[i])],end='')
注意: input()函数的返回值是str类型,所以当拿它里的元素做索引下标时要转换成int类型。
3、实验题目:学生成绩管理 将学生对象存入列表中,并按成绩对学生进行排序,并获取成绩最高和成绩最低的学生信息,并将最高分和最低分的学生从列表删除,最后再对列表进行拷贝,对拷贝的列表进行翻转输出。
class student:
def __init__(self,sname,grade):
self.grade=grade
self.sname=sname
def __str__(self):
return '姓名 '+self.sname+' 成绩 '+str(self.grade)
lst3=[student('Helen',98),student('Lucy',77),student('Nacy',92)
,student('Bluse',68),student('Lence',82)]
def getGrade(stu):
return stu.grade
lst3.sort(key=getGrade)
print('排序后的学生信息如下:')
for stu in lst3 :
print(stu)
print("成绩最高的同学是:",max(lst3,key=getGrade))
print("成绩最低的同学是:",min(lst3,key=getGrade))
del lst3[0]
del lst3[3]
list3=lst3.copy()
lst3.sort(key=getGrade,reverse=True)
print('删除拷贝排序后的学生信息如下:')
for i in lst3:
print(i)
注意:sort(), remove()函数的返回值为None,它是直接在原列表上做操作。max函数,min函数中有key参数,表示以某个为标准进行取大小。
4、实验题目:商品筛选 有如下商品价格:568,239,368,425,121,219,834,1263,26,请输入随意一个价格区间进行商品的筛选,并能够对筛选出的商品进行从大到小和从小到大进行排序,并求出这个区间的商品的平均价格。
price=[568,239,368,425,121,219,834,1263,26]
lst4=eval(input("请输入一个价格区间:"))
list4=[]
for i in price:
if lst4[0]< i < lst4[1]:
list4.append(i)
list4.sort()
print('商品价格从小到大排序为:',list4)
list4.sort(reverse=True)
print('商品价格从大到小排序为:',list4)
print("该区间商品的平均价格是",sum(list4)/len(list4))
注意:sum()内置函数的类型是int
5、实验题目:编写程序,使用列表生成表达式生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。
import random
list6=[random.randint(1,100) for i in range(0,20)]
print("生成的列表为:\n",list6)
lst6=list6[::2]
lst6.sort(reverse=True)
list6[::2]=lst6
print("改变后的列表为:\n",list6)
6、实验题目:编写程序,使用列表生成表达式生成一个包含50个随机整数的列表,然后删除其中所有奇数
对于这道题,我开始的写的代码是:
import random
list7=[random.randint(1,500) for i in range(0,50)]
print("生成的列表为:\n",list7)
for i in range(0,len(list7)):
if list7[i] %2 != 0:
del list7[i]
print("删除奇数后的列表为:\n",list7)
但是出现了报错: 思考为啥会报错,list7的长度就是50呀,最后还是通过老师的指点才想明白,del删除了元素,list7的长度就会发生更改变。
然后就开始想该怎么处理,想了好久,突然有了个灵感,可以先把奇数都赋值为0,然后再把0去掉不就可以了吗,然后又要解决怎么把相同的0都去掉,开始使用的是remove()函数,但是只能去掉一个0,然后突然又想到可以先转换为集合去重,然后转换为列表,0不就剩1个了吗,再用remove()不就ok了。
import random
list7=[random.randint(1,500) for i in range(0,50)]
print("生成的列表为:\n",list7)
for i in range(0,len(list7)):
if list7[i] %2 != 0:
list7[i]=0
list7=list(set(list7))
list7.remove(0)
print("删除奇数后的列表为:\n",list7)
这是我目前想到的方法,如果有更好的方法,希望和我交流交流,非常期待呀,一起进步~
7、实验题目:统计词频 给一段文本,例如:“who have an apple apple is free free is money you know”,请统计单词出现的次数。(提示:需要用正则表达式去掉标点符号和空格)
这道题其实老师是想让我们用正则表达式来做,无奈我学的不好,不会用,就使用其他方法啦
str="who have an apple apple is free free is money you know"
str1=str.replace(' ','')
str2=str1.replace('"','')
print(str2)
print('apple出现的次数:',str2.count('apple'))
仅仅针对这道题哦~
|