Python列表、字典练习题

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)来进行修改。

change函数需要修改,修改之后为:

def change(newname,newsno):
    dir1={}
    dir1.setdefault(newname, newsno)
    dir.update(dir1)
    print('修改成功!')

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'))

仅仅针对这道题哦~

  • 8
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello&&world

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值