组合数据类型
字符串、列表、元组、集合和字典都属于组合数据类型。
根据数据的组织方式不同,组合数据类型主要分为三类:
序列、集合和映射。
序列类型
序列类型指元素按照一定的顺序排成一列的一组数。可存放多个值的连
续内存空间,值具有一定的先后顺序。元素类型可以不同,通过索引访
问序列的特定元素。
• 序列类型支持双向索引:正向索引和反向索引。
• 正向索引时,索引开始: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()索引匹配第一次出现的位置
2、实验题目:中文数字对照表
输入一个数字,转换成中文数字。比如:1234567890 -> 壹贰叁肆伍陆柒捌玖零。
简单直接上代码。
numbers = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
number = input("输入一个数字:")
for i in number:
print(numbers[int(i)], end="")
3、实验题目:学生成绩管理
将学生对象存入列表中,并按成绩对学生进行排序,并获取成绩最高和成绩最低的学生信息,并将最高分和最低分的学生从列表删除,最后再对列表进行拷贝,对拷贝的列表进行翻转输出。
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.面向对象
- _str _print输出时自动调用
- sort排序
- del 删除
- copy.deepcopy()深拷贝
- reverse()翻转
4、实验题目:商品筛选
有如下商品价格: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)
运行成功!
5、实验题目:生成验证码
验证码一般是包括一些随机产生的数字或符号,请实现随机生成一组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)
第二种更快,更简单!
6.实验题目:
编写程序,使用列表生成表达式生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。(提示,使用切片)
import random
ls = [random.randint(1, 100) for i in range(20)]
print('生成列表:', ls)
ls[::2] = sorted(ls[::2], reverse=True)
print('排序后:', ls)
7.实验题目:
编写程序,使用列表生成表达式生成一个包含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)
也能实现同等功能!