Python初级案例教学之组合数据类型(列表)【第六课】

举报
南蓬幽 发表于 2022/05/17 10:45:07 2022/05/17
【摘要】 组合数据类型 序列类型 好友管理系统 实验题目:中文数字对照表 实验题目:学生成绩管理 实验题目:商品筛选 实验题目:生成验证码 1.使用range() 2.使用randint() 实验题目:编写程序,使用列表生成表达式生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。(提示,使用切片) 实验题目:编写程序,使用列表生成表达式生成一个包含50个随机...

组合数据类型

字符串、列表、元组、集合和字典都属于组合数据类型。
根据数据的组织方式不同,组合数据类型主要分为三类:
序列、集合和映射。

序列类型

序列类型指元素按照一定的顺序排成一列的一组数。可存放多个值的连
续内存空间,值具有一定的先后顺序。元素类型可以不同,通过索引访
问序列的特定元素。
• 序列类型支持双向索引:正向索引和反向索引。
• 正向索引时,索引开始:0,索引结束:序列长度-1。
• 反向索引时,索引开始:-1,索引结束:序列的长度的负数。
• 序列类型包括:
• 字符串(string)
• 列表(list)
• 元组(tuple)
这里主要讲一下列表!

好友管理系统

1、实验题目:好友管理系统
请设计一个好友管理系统,每个功能都对应一个序号,用户可根据提示“请输入您的选项”选择序号执行相应的操作,包括:
(1)添加好友:用户根据提示“请输入要添加的好友:”输入要添加好友的姓名,添加后会提示“好友添加成功”。
(2)删除好友:用户根据提示“请输入删除好友姓名:”输入要删除好友的姓名,删除后提示“删除成功”。
(3)备注好友:用户根据提示“请输入要修改的好友姓名:”和“请输入修改后的好友姓名:”分别输入修改前和修改后的好友姓名,修改后会提示“备注成功”。
(4)展示好友:若用户还没有添加过好友,提示“好友列表为空”,否则返回每个好友的姓名。
(5)退出:关闭好友系统。

list_f = []
print("好友管理系统")
print("1.添加好友")
print("2.删除好友")
print("3.备注好友")
print("4.展示好友")
print("5.退出")

while True:
    n = int(input("请输入您的选项:"))
    if n == 1:
        f = input("请输入要添加的好友:")
        list_f.append(f)
        print("好友添加成功")
    elif n == 2:
        f = input("请输入删除好友姓名:")
        list_f.remove(f)
        print("删除成功")
    elif n == 3:
        o_name = input("请输入要修改的好友姓名:")
        n_name = input("请输入修改后的好友姓名:")
        i = list_f.index(o_name)
        list_f[i] = n_name
        print("备注成功")
    elif n == 4:
        if len(list_f) == 0:
            print("好友列表为空")
        else:
            for m in list_f:
                print(m)
    elif n == 5:
        break
print("关闭好友系统")

重点:
1.建一个空列表存放好友信息。
2.append()添加
3.remove()删除
4.index()索引匹配第一次出现的位置
在这里插入图片描述

实验题目:中文数字对照表

输入一个数字,转换成中文数字。比如:1234567890 -> 壹贰叁肆伍陆柒捌玖零。

简单直接上代码。

numbers = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
number = input("输入一个数字:")
for i in number:
    print(numbers[int(i)], end="")

在这里插入图片描述

实验题目:学生成绩管理

将学生对象存入列表中,并按成绩对学生进行排序,并获取成绩最高和成绩最低的学生信息,并将最高分和最低分的学生从列表删除,最后再对列表进行拷贝,对拷贝的列表进行翻转输出。

import copy
class Student:
    def __init__(self, sno, name, age, score):
        self.sno = sno
        self.name = name
        self.age = age
        self.score = score

    def __str__(self):
        return '学号:'+self.sno+',姓名:'+self.name+',年龄:'+self.age+',成绩:'+self.score


if __name__ == '__main__':
    ls1 = [Student('181010', '黎明', '18', '90'), Student('181256', '王三千', '20', '89'), Student('182345', '国谷机', '18', '98'), Student('181568', '白开水', '19', '67')]
    ls1.sort(key=lambda stu: stu.score)
    # n = min(ls1, key=lambda stu: stu.score)
    # m = max(ls1, key=lambda stu: stu.score)
    # print("成绩最高的学生信息:", m)
    # print("成绩最低的学生信息:", n)
    print("成绩最高的学生信息:", ls1[3])
    print("成绩最低的学生信息:", ls1[0])
    del ls1[3], ls1[0]
    ls2 = copy.deepcopy(ls1)
    ls2.reverse()
    for i in range(2):
        print(ls2[i])

重点:
1.面向对象
2. _str _print输出时自动调用
3. sort排序
4. del 删除
5. copy.deepcopy()深拷贝
6. reverse()翻转
在这里插入图片描述

实验题目:商品筛选

有如下商品价格:568,239,368,425,121,219,834,1263,26,请输入随意一个价格区间进行商品的筛选,并能够对筛选出的商品进行从大到小和从小到大进行排序,并求出这个区间的商品的平均价格。

简单直接上代码!

list1 = [568, 239, 368, 425, 121, 219, 834, 1263, 26]
list2 = []
sum = 0
a = int(input('请输入一个价格下区间:'))
b = int(input('请输入一个价格上区间:'))
for i in list1:
    if i>a and i<b:
        list2.append(i)
list2.sort()
print('从小到大:', list2)
list2.sort(reverse=True)
print('从大到小', list2)
for m in list2:
    sum += m
avge = sum/len(list2)
print('平均价格:%.2f' % avge)

在这里插入图片描述

运行成功!

实验题目:生成验证码

验证码一般是包括一些随机产生的数字或符号,请实现随机生成一组6位验证码的功能。
每个字符可以是大写字母、小写字母或数字,有且只能是这三种类型中的一种。

1.使用range()

实现思想:
1.需要引入random库
2.将生成验证码功能写成函数,可以生成任意位数的验证码
3.通过ASCLL的值转换为大小写字母
4.随机抽取

import random
# 用range()
def code(len):
    code_list = []
    for i in range(10):
        code_list.append(str(i))  #生成数字
    for i in range(65, 91):
        code_list.append(chr(i))   #生成大写字母
    for i in range(97, 123):
        code_list.append(chr(i))   #生成小写字母
    r = random.sample(code_list, len)   
    m = ''.join(r)
    return m


if __name__ == '__main__':
    n = code(6)
    print(n)

2.使用randint()

1.需要引入random库
2.random.randint()随机抽取
3.chr()通过ASCLL值转换为字符

import random
# 用randint()
code = ''
for i in range(6):
    n = random.randint(0, 9)
    b = chr(random.randint(65, 90))
    s = chr(random.randint(97, 122))
    code += str(random.choice([n, b, s]))
print(code)

第二种更快,更简单!

实验题目:编写程序,使用列表生成表达式生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。(提示,使用切片)

import random
ls = [random.randint(1, 100) for i in range(20)]
print('生成列表:', ls)
ls[::2] = sorted(ls[::2], reverse=True)
print('排序后:', ls)

在这里插入图片描述

实验题目:编写程序,使用列表生成表达式生成一个包含50个随机整数的列表,然后删除其中所有奇数(提示:从后向前删。)

import random
ls = [random.randint(1, 1000) for i in range(50)]
print('生成列表:', ls)
for i in ls[::-1]:
    if i % 2 != 0:
        ls.remove(i)
print('删除后:', ls)
# ls1 = [i for i in ls if i % 2 == 0]
# print('删除后:', ls1)

ls1 = [i for i in ls if i % 2 == 0]
print(‘删除后:’, ls1)
也能实现同等功能!

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200