“Python 语言程序设计实验2022春季”实验报告

实验报告二 Python序列结构

实验报告二 Python序列结构

一、实验目的

1.掌握:Python常用内置对象-列表、元组、字典、集合。

2.掌握运算符和内置函数对列表、元组、字典、集合的操作。

3.理解列表推导式、生成器表达式的工作原理。

4.掌握切片操作。

5.掌握序列解包的用法。

二、实验内容

1、编写程序,用一个变量存储以下信息:学号,姓名,所在学院,专业名称。

2、编写程序,用一个变量存储你所在小组的组员名单。

3、对组员名单进行操作,如增加一个同学,减少一个同学,修改一个同学的姓名。

4、编写程序,录入小组成员的姓氏,利用集合输出小组中的所有姓氏。

5、编写程序,用一个变量存储组员名单,组员Python成绩,计算组员总人数,总分,平均分。

6、编写程序,用一个变量存储组员成绩,要求有低于60的成绩,利用列表推导式,筛选出低于60分的成绩。

7、产生两个随机数x,y,要求0<x<y<组员长度.输出组员成绩[x:y]切片的成绩。

8、利用生成器表达式生成0-9的数值,要求每一个数值乘以你的幸运数字,最后将生成器对象转换成列表,输出列表的结果。

9、复制一段文章或者论文,利用字典统计出每个字出现的次数。

10、棋盘一共64个小格子,第一个格子放一粒米,第二个2粒米,第三个4粒米,第四个8粒米,以此类推一直把64个格子放满需要多少粒米?要求使用列表推导式和内置函数进行计算。

三、实验结果

1、编写程序,用一个变量存储以下信息:学号,姓名,所在学院,专业名称。

实验思路:设定字典变量,并对其键赋值即可

Dict = dict.fromkeys(['学号', '姓名', '所在学院', '专业名称'])#先定义键
Dict['学号'] = '20212501526'
Dict['姓名'] = '石尊博'
Dict['所在学院'] = '软件学院'
Dict['专业名称'] = '软件工程专业'
print(Dict)
copy

运行结果截图:

图片描述

2、编写程序,用一个变量存储你所在小组的组员名单。

实验思路:设定列表,将姓名存入列表中

print("小组名单:")
m_list = ['小明', '小李', '小红']
print(m_list)

copy

运行结果截图:

图片描述

3、对组员名单进行操作,如增加一个同学,减少一个同学,修改一个同学的姓名。

实验思路:使用切片方法对列表进行修改

m_list = ['小明', '小李', '小红']
m_list[len(m_list):] = ['小刚'] #实现增加操作(在尾部添加,要求出尾部位置数,明确位置
print('增加后组员名单为:', m_list)
m_list[2:3:] = []  #实现删除操作(应该是第几个元素:元素位置数+想要删掉的元素个数)
print('减少后组员名单为:', m_list)
m_list[2:3] = ['大刚']#实现修改操作(想要实现插入,就是前面的两个数一样,就在那个数的位置插入了新书,不一样就是修改)
print('修改后组员名单为:', m_list)
 
copy

运行结果截图:

图片描述

4、编写程序,录入小组成员的姓氏,利用集合输出小组中的所有姓氏。

实验思路:使用input函数将姓氏放入集合中,自动去掉重复,在输出即可

print('请输入小组成员的姓氏')
Set = input()
print('小组中的所有姓氏为:', Set) 
 
copy

运行结果截图:

图片描述

5、编写程序,用一个变量存储组员名单,组员Python成绩,计算组员总人数,总分,平均分。

实验思路:将名字,成绩分别作为键和值放入字典中,然后使用len、sum等计算人数、总分、平均分

Dict = {'小明': 95, '小张': 90, '小红': 89, '小李': 97}
Len = len(Dict)
print('小组总人数为:', Len, end='\n')
Sum = 0
for i in Dict.values():
    Sum += i
average = Sum / Len
print('总分为:', Sum, end='\n')
print('平均数为:', average, end='\n')
copy

运行结果截图:

图片描述

6、编写程序,用一个变量存储组员成绩,要求有低于60的成绩,利用列表推导式,筛选出低于60分的成绩。

实验思路:将成绩放入列表中,然后使用列表推导式[for i in List if i < 60]即可

List = [70, 59, 60, 44, 59, 79, 80, 99]
print('低于60分的成绩有:')
print([i for i in List if i < 60])
copy

运行结果截图:

图片描述

7、产生两个随机数x,y,要求0<x<y<组员长度.输出组员成绩[x:y]切片的成绩。

实验思路:使用import random以及randint函数产生随机数然后使用切片即可

import random
L = 8 #组员长度
alist = [98, 92, 30, 65, 89, 66, 50, 90]
x = random.randint(0, L)
y = random.randint(0, L)
print(alist[x:y])
copy

运行结果截图:

图片描述

8、利用生成器表达式生成0-9的数值,要求每一个数值乘以你的幸运数字,最后将生成器对象转换成列表,输出列表的结果。

实验思路:使用列表生成器然后将其赋值给新列表再输出即可

g = ((i * 7) for i in range(9)) 
alist = list(g)
print(alist)
copy

运行结果截图:

图片描述

9、复制一段文章或者论文,利用字典统计出每个字出现的次数。

实验思路:将文字赋值给变量后,使用zip函数,将文字在列表中展开并创建相应字典键,使用嵌套循环加if判断,如果有相同的字符,键相应的值加一即可

m = '给自己一份坚强,擦干眼泪;给自己一份自信,' \
    '不卑不亢;给自己一份洒脱,悠然前行。轻轻品,' \
    '静静藏。为了看阳光,我来到这世上;为了与阳光同行,' \
    '我笑对忧伤。'  #用一个字符串来承接这部分文字
alist = list(zip(m)) #使用zip将文字压缩到列表中(使每个文字分开,字符可以直接用 == 判断是否相等)
adict = dict()
for i in range(len(m)): #先将所有种的字放入字典中并将值设为0,使用字典可以自动去掉重复
    adict[alist[i]] = 0
for i in adict:     #获取字典中的每个键,用于下面比较是否有这个字,有那么其值就加一
    for j in range(len(m)):
        if i == alist[j]:
            adict[i] += 1
print(adict)
copy

运行结果截图:

图片描述

10、棋盘一共64个小格子,第一个格子放一粒米,第二个2粒米,第三个4粒米,第四个8粒米,以此类推一直把64个格子放满需要多少粒米?要求使用列表推导式和内置函数进行计算。

实验思路:使用列表推导式,并将i做2**(i-1)即可

alist = [2**(i-1) for i in range(1, 65)]  
Sum = sum(alist)
print('共需:', Sum, '粒米')
copy

运行结果截图:

图片描述 ##四、实验小结

问题与解决办法:

1、列表推导式和生成器对象不能熟练使用

解决方法:查阅资料后学习到正确用法,多加练习后熟练掌握

2、无法正常产生随机数

解决方法:查找资料后,了解到没有添加import random语句,导致出错,添加后问题解决

心得体会:

1、使用列表、字典、集合等方法可以快速处理数据,提高效率。

2、使用某些函数时,需要提前导入相应模块,否则程序会出现错误。

最新评论
暂无评论~