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

实验报告一 Python序列结构 截止时间3月8日

实验报告一 Python序列结构

学号:20222501499 姓名:张亦乐

一、实验学时:2学时

二、实验目的

  1. 掌握:Python常用内置对象-列表、元组、字典、集合。
  2. 掌握运算符和内置函数对列表、元组、字典、集合的操作。
  3. 理解列表推导式、生成器表达式的工作原理。
  4. 掌握切片操作。
  5. 掌握序列解包的用法。

三、实验内容

  1. 编写程序,用一个变量存储以下信息:学号,姓名,所在学院,专业名称。
  2. 编写程序,用一个变量存储你所在小组的组员名单。
  3. 对组员名单进行操作,如增加一个同学,减少一个同学,修改一个同学的姓名。
  4. 编写程序,录入小组成员的姓氏,利用集合输出小组中的所有姓氏。
  5. 编写程序,用一个变量存储组员名单,组员Python成绩,计算组员总人数,总分,平均分。
  6. 编写程序,用一个变量存储组员成绩,要求有低于60的成绩,利用列表推导式,筛选出低于60分的成绩。
  7. 编写程序,利用列表推导式将列表中的整数提取出来[123, 'hello', (1,2), 456, {23}, {'a':789}]。
  8. 利用生成器表达式生成0~9的数值,要求每一个数值乘以你的幸运数字,最后将生成器对象转换成列表,输出列表的结果。
  9. 给定一个列表member0 = ["今天","天气","真好"],要求通过 insert()方法和切片两种方案,把列表member0变成member1 = ["今天","的","天气","是","真好","呀"]。
  10. 现有一购物车列表如下:
carts=[{"name":"床", "price":1999, "num":1}, {"name":"枕头", "price":10,"num":2}, {"name":"被子", "price":20, "num":1}]
copy

要求通过用户输入总资产,例如:30003000,然后显示购物车列表,计算购物车商品总金额,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。

四、实验结果

(在此部分列出保持缩进格式的程序代码及运行结果截图,请注意保持格式统一,截图清晰,大小合适)

  1. 编写程序,用一个变量存储以下信息:学号,姓名,所在学院,专业名称。
#程序名:lx.py
#功 能:编写程序,用一个变量存储以下信息:学号,姓名,所在学院,专业名称。
#作 者:张亦乐
#学 号:20222501499
#日 期:2022.3.7
#思 路:定义一个类student,直接输出
class student:
    def __init__(self, num, name, academy, major):
        self.num = num
        self.name = name
        self.academy = academy
        self.major = major
s1 = student("13", "李四", "软件学院", "软件工程")
print(s1.num+" "+s1.name+" "+s1.academy+" "+s1.major)
copy

图片描述 2. 编写程序,用一个变量存储你所在小组的组员名单。

#程序名:lx.py
#功 能:编写程序,用一个变量存储你所在小组的组员名单。
#作 者:张亦乐
#学 号:20222501499
#日 期:2022.3.7
#思 路:定义一个类student,直接输出
class student:
    def __init__(self, num, name, academy, major):
        self.num = num
        self.name = name
        self.academy = academy
        self.major = major
s1 = student("13", "李四", "软件学院", "软件工程")
s2 = student("12", "张三", "软件学院", "软件工程")
s3 = student("11", "王五", "软件学院", "软件工程")
s4 = student("10", "李二", "软件学院", "软件工程")
print(s1.num+" "+s1.name+" "+s1.academy+" "+s1.major)
print(s2.num+" "+s2.name+" "+s2.academy+" "+s2.major)
print(s3.num+" "+s3.name+" "+s3.academy+" "+s3.major)
print(s4.num+" "+s4.name+" "+s4.academy+" "+s4.major)
copy

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

#程序名:lx3.py
#功 能:对组员名单进行操作,如增加一个同学,减少一个同学,修改一个同学的姓名。
#作 者:张亦乐
#学 号:20222501499
#日 期:2022.3.7
#思 路:定义一个类student,直接输出
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)
    def alter_name(self, position, name):
        self.member[position-1].name = name
s1 = student("13", "李四", "软件学院", "软件工程")
s2 = student("12", "张三", "软件学院", "软件工程")
s3 = student("11", "王五", "软件学院", "软件工程")
s4 = student("10", "李二", "软件学院", "软件工程")
group_list = group()
group_list.add_member(s1, s2, s3,s4)

s5 = student("9", "张亦乐", "软件学院", "软件工程")
group_list.add_member(s5)

group_list.alter_name(position=1, name="尹浩洋")
for m in group_list.member:
    print(m.num+":"+m.name+" "+m.academy+" "+m.major)
copy

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

#程序名:lx4.py
#功 能:编写程序,录入小组成员的姓氏,利用集合输出小组中的所有姓氏。
#作 者:张亦乐
#学 号:20222501499
#日 期:2022.3.8
#思 路:使用input输入小组成员的姓氏,再使用set强制转化成列表
name_list = input("请输入小组成员的姓氏(空格分隔):")
name_set = set(name_list.split(" "))
print("小组成员的姓氏有:")
for name in name_set:
    print(name, end=" ")
copy

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

#程序名:lx5.py
#功 能:编写程序,用一个变量存储组员名单,组员Python成绩,计算组员总人数,总分,平均分。
#作 者:张亦乐
#学 号:20222501499
#日 期:2022.3.8
#思 路:在grades类中再添加一个student类,在grades类中定义一个add_member,count_member,sum_grade等函数,然后对函数进行运用
class grades:
    class student:
        def __init__(self, name, grade):
            self.name = name
            self.grade = grade

    def __init__(self):
        self.member = []

    def add_member(self, *args, **kwargs):
        for s in args:
            st = self.student(s.name, s.grade)
            self.member.append(st)
        for key in kwargs:
            print(key, kwargs[key])
            st = self.student(key, kwargs[key])
            self.member.append(st)

    def count_number(self):
        return len(self.member)

    def sum_grade(self):
        sum = 0
        for m in self.member:
            sum += m.grade
        return sum

    def average_grade(self):
        return round(self.sum_grade()/self.count_number(), 1)

group_grades = grades()
group_grades_dic = {"张亦乐": 79, "尹浩洋": 83, "李宜航": 87, "马文祥": 89}
group_grades.add_member(**group_grades_dic)

print("组员总人数:", group_grades.count_number())
print("组员总分:", group_grades.sum_grade())
print("组员平均分:", group_grades.average_grade())
copy

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

#程序名:lx5.py
#功 能:编写程序,用一个变量存储组员成绩,要求有低于60的成绩,利用列表推导式,筛选出低于60分的成绩。
#作 者:张亦乐
#学 号:20222501499
#日 期:2022.3.8
#思 路:在grades类中再添加一个student类,在grades类中定义一个fail函数,在运用一个add_member函数进行任务数据的添加,再运用fail函数对数据进行数据筛选然后对函数进行运用
class grades:
    class student:
        def __init__(self, name, grade):
            self.name = name
            self.grade = grade

    def __init__(self):
        self.member = []

    def add_member(self, *args, **kwargs):
        for s in args:
            st = self.student(s.name, s.grade)
            self.member.append(st)
        for key in kwargs:
            print(key, kwargs[key])
            st = self.student(key, kwargs[key])
            self.member.append(st)


    def fail(self):
        return {m.name: m.grade for m in self.member if m.grade < 60}

group_grades = grades()
group_grades_dic = {"张亦乐": 59, "尹浩洋": 83, "李宜航": 87, "马文祥": 89}
group_grades.add_member(**group_grades_dic)

print("低于60分的人:")
failed = group_grades.fail()
for name in failed:
    print(name, end=" ")
    print(failed[name])
copy

图片描述 7.编写程序,利用列表推导式将列表中的整数提取出来[123, 'hello', (1,2), 456, {23}, {'a':789}]。

#程序名:lx5.py
#功 能:编写程序,利用列表推导式将列表中的整数提取出来[123, 'hello', (1,2), 456, {23}, {'a':789}]。
#作 者:张亦乐
#学 号:20222501499
#日 期:2022.3.8
#思 路:使用一个列表推导式,再定义取出的类型为整型,使得其他数被筛出
alist =[123, 'hello', (1,2), 456, {23}, {'a':789}]
list2=[i for i in alist if type(i) ==int]
print(list2)
copy

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

#程序名:lx8.py
#功 能:利用生成器表达式生成0~9的数值,要求每一个数值乘以你的幸运数字,最后将生成器对象转换成列表,输出列表的结果。
#作 者:张亦乐
#学 号:20222501499
#日 期:2022.3.10
#思 路:使用生成器表达自动生成0到9的数,在书写时将i乘以13,然后建立一个新的列表,使用append内置函数将数字添加至列表尾部
g = ( i*13 for i in range(10))
list =[]
for num in g:
    list.append(num)
print(list)
copy

图片描述 9. 给定一个列表member0 = ["今天","天气","真好"],要求通过 insert()方法和切片两种方案,把列表member0变成member1 = ["今天","的","天气","是","真好","呀"]。

#程序名:lx9.py
#功 能:给定一个列表member0 = ["今天","天气","真好"],要求通过insert()方法和切片两种方案,把列表member0变成member1 = ["今天","的","天气","是","真好","呀"]。
#作 者:张亦乐
#学 号:20222501499
#日 期:2022.3.10
#思 路:使用input输入小组成员的姓氏,再使用set强制转化成列表。法2:使用切片将“的”,“是”,“呀”插入到原列表之中
member0 = ["今天","天气","真好"]
member0.insert(1,"的")
member0.insert(3,"是")
member0.insert(5,"呀")
print(member0)
member0 = ["今天","天气","真好"]
member2 = ["的"]
member3 = ["是"]
member4 = ["呀"]
member0[1:1] =member2
member0[3:1] =member3
member0[5:1] =member4
print(member0)
copy

图片描述 10. 现有一购物车列表如下:

carts=[{"name":"床", "price":1999, "num":1}, {"name":"枕头", "price":10,"num":2}, {"name":"被子", "price":20, "num":1}]
copy

要求通过用户输入总资产,例如:30003000,然后显示购物车列表,计算购物车商品总金额,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。

#程序名:lx4.py
#功 能:现有一购物车列表如下:
#carts=[{"name":"床", "price":1999, "num":1}, {"name":"枕头", "price":10,"num":2}, {"name":"被子", "price":20, "num":1}]要求通过用户输入总资产,例如:3000,然后显示购物车列表,计算购物车商品总金额,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
#作 者:张亦乐
#学 号:20222501499
#日 期:2022.3.10
#思 路:将所有的prices与num乘积相加
carts=[{"name":"床", "price":1999, "num":1}, {"name":"枕头", "price":10,"num":2}, {"name":"被子", "price":20, "num":1}]
money = int(input("请输入您的总金额:"))
sum = 0
for i in carts:
    sum+= i["price"]*i["num"]
if sum <= money:
    print('恭喜你成功购买')
else:
    print('账户余额不足')
copy

图片描述

五、实验小结

1.报错信息:TypeError: can only concatenate str (not "int") to str。 解决方法:在使用“+”做拼接的时候,必须使用字符串,或者把数字转换成字符串 2.报错信息:NameError: name 'a' is not defined 解决办法:只需根据报错信息,仔细检查下拼写,很快就能解决 3.报错信息:SyntaxError: invalid syntax  解决办法:当报错的时候,要注意回到错误信息的那一行,然后从下向上,慢慢查找,此处这个程序if语法忘了在判断语句后面加“:”,所以导致出错。 4.报错信息:TabError:inconsistent use of tabs and spaces in indentation 解决办法:在报错的行把鼠标放在第一个字母前,删除空格回到上一行,然后按回车就好了 5.报错信息:NameError: name 'prin' is not defined 解决办法:改一下print的名称就好了

最新评论

此次实验报告格式整洁,逻辑清晰,分析切题,实验报告完整。

2023-03-15 17:47:07
回复