#实验报告二 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. 编写程序,用一个变量存储以下信息:学号,姓名,所在学院,专业名称。
代码如下:
#学号,姓名,所在学院,专业名称
class student:
def __init__(self,num,name,where,major):
self.num = num
self.name = name
self.where = where
self.major = major
s = student("1", "你好", "软件学院", "软件工程")
print(s.num+ "," + s.name + "," + s.where + "," + s.major)
实验结果如下:
2. 编写程序,用一个变量存储你所在小组的组员名单。
代码如下:
#1,张三,软件学院,软件工程
#2,李四,软件学院,软件工程
#3,王五,软件学院,软件工程
class student:
def __init__(self, num, name, academy, major):
self.num = num
self.name = name
self.academy = academy
self.major = major
class group:
def __init__(self):
self.member = []
def add_member(self, *args):
for s in args:
st = student(s.num, s.name, s.academy, s.major)
self.member.append(st)
s1 = student("1", "张三", "软件学院", "软件工程")
s2 = student("2", "李四", "软件学院", "软件工程")
s3 = student("3", "王五", "软件学院", "软件工程")
print("小组成员名单如下:")
group_list = group()
group_list.add_member(s1, s2, s3)
for m in group_list.member:
print(m.num+","+m.name+","+m.academy+","+m.major)
实验结果如下:
3. 对组员名单进行操作,如增加一个同学,减少一个同学,修改一个同学的姓名。
代码如下:
#3. 对组员名单进行操作,如增加一个同学,减少一个同学,修改一个同学的姓名。
L = input("请输入小组成员:")
L0 = list(L.split())
print("小组成员有:",L0)
name1 = input("请输入要增加的小组成员:")
L0.append(name1)
print("增加后的结果为:",L0)
name2 = int(input("请输入要删除的小组成员位置:"))
L0.pop(name2 -1)
print("删除后的结果为:",L0)
name3 = int(input("请输入要修改的小组成员位序:"))
name4 = input("请输入要增加的小组成员:")
L0[name3 -1] = name4
print("修改后的结果为:",L0)
实验结果如下:
4. 编写程序,录入小组成员的姓氏,利用集合输出小组中的所有姓氏。
代码如下:
name_list = input("请输入小组成员的姓氏:")
name_set = set(name_list.split(" "))
print("小组成员的姓氏有:")
for name in name_set:
print(name, end=" ")
实验结果如下:
5. 编写程序,用一个变量存储组员名单,组员Python成绩,计算组员总人数,总分,平均分。
代码如下:
#5. 编写程序,用一个变量存储组员名单,组员Python成绩,计算组员总人数,总分,平均分。
name0 = {"李华", "聪明", "英才"}
grade0 = {40, 60, 30}
s = dict(zip(name0,grade0))
print("组员总人数为:", len(s))
print("组内总分为:", sum(s.values()))
print("组内平均分为:%0.2f" %(sum(s.values())/len(s)))
实验结果如下:
6. 编写程序,用一个变量存储组员成绩,要求有低于60的成绩,利用列表推导式,筛选出低于60分的成绩。
代码如下:
#6. 编写程序,用一个变量存储组员成绩,要求有低于60的成绩,利用列表推导式,筛选出低于60分的成绩。
name0 = {"李华", "聪明", "英才"}
grade0 = {40, 60, 30}
s = dict(zip(name0,grade0))
grade = list(s.values())
grade1 = [ i for i in grade if i<60]
print("低于六十分的成绩有:",grade1)
实验结果如下:
7. 产生两个随机数x,y,要求0<x<y<组员长度.输出组员成绩[x:y]切片的成绩。
代码如下:
#7. 产生两个随机数x,y,要求0<x<y<组员长度.输出组员成绩[x:y]切片的成绩。
grade = [40, 60, 30, 70, 90, 20]
import random
x = random.randint(1, 5)
y = random.randint(0, 4)
print("组员成绩[x:y]切片的成绩为:", grade[x:y])
实验结果如下:
8. 利用生成器表达式生成0-9的数值,要求每一个数值乘以你的幸运数字,最后将生成器对象转换成列表,输出列表的结果。
代码如下:
#8. 利用生成器表达式生成0-9的数值,要求每一个数值乘以你的幸运数字,最后将生成器对象转换成列表,输出列表的结果。
n = int(input("请输入你的幸运数字:"))
s = list(i*n for i in range(0, 10))
print(s)
实验结果如下:
9. 复制一段文章或者论文,利用字典统计出每个字出现的次数。
代码如下:
text = input("请输入一句话:")
m = dict()
for i in text:
if i.isalpha():
if i in m:
m[i] += 1
else:
m[i] = 1
print(m)
实验结果如下:
10. 棋盘一共64个小格子,第一个格子放一粒米,第二个2粒米,第三个4粒米,第四个8粒米,以此类推一直把64个格子放满需要多少粒米?要求使用列表推导式和内置函数进行计算。
代码如下:
s = [2**n for n in range(0,64)]
m = sum(s)
print(f"一直把64个格子放满需要{m}粒米")
实验结果如下:
##四、实验结果
问题和解决办法:
- student() takes no arguments
使用对象时,
class student:
def init(self,obj):
下划线要左右分别打两个,否则会出现类型错误
TypeError: student() takes no arguments
系统将”init“识别成”int“,有类型争议
-
在列表中的,增加数据—append(),
删除数据—pop() -
对于字典,有values()可提取“值”,zip()可将两个列表合成一个字典。
心得体会:
-
需要掌握常用内置函数的用法;
-
在学习过程中应当尤其注重函数参数与函数功能之间关系的理解。