python
数据统计综合练习
# 开发一个教务管理系统,在该系统中可以维护和管理学员的成绩信息,具体需求如下:
# 1. 添加学生信息:根据提示录入学生姓名、语文、数学、英语成绩,录入完成保存到系统中。
# 2. 修改学生信息:要求输入要修改的学生姓名,然后再提示输入语文、数学、英语成绩,输入完成后修改学员信息。
# 3. 删除学生信息:要求输入要删除的学生姓名,根据姓名删除学生信息。
# 4. 查询学生信息:要求输入要查询的学生姓名,根据姓名查询学生信息并输出。
# 5. 列出所有学生:遍历所有学生信息并输出。
# 6. 统计班级成绩:统计班级语文、数学、英语成绩的最高分、最低分、平均分,以及语文、数学、英语最高分和最低分的学员姓名。
# 7. 退出系统。
print("请输入你的操作")
arr = {}
while True:
caozuo = input("请输入你的操作")
if caozuo == "添加学生信息":
print("请输入学生的姓名,语文,数学,英语成绩")
while True:
data = input("请输入学生的姓名")
if (data == '退出系统'):
break
else:
name = data
Chinese = int(input("请输入语文成绩"))
Maths = int(input("请输入数学成绩"))
english = int(input("请输入英语成绩"))
arr[name] = {
"语文": Chinese,
"数学": Maths,
"英语": english
}
elif caozuo == '查询学生信息':
name = input("请输入要查询的学生的姓名")
while True:
if (name == '退出系统'):
break
else:
if (arr.get(name) == None):
print("该学生不存在")
else:
print(arr.get(name))
break
elif caozuo == '修改学生信息':
name = input("请输入要修改的学生的姓名")
while True:
if (name == '退出系统'):
break
else:
Chinese = int(input("请输入语文成绩"))
Maths = int(input("请输入数学成绩"))
english = int(input("请输入英语成绩"))
arr[name] = {
"语文": Chinese,
"数学": Maths,
"英语": english
}
break
elif caozuo == '删除学生信息':
name = input("请输入要删除的学生的姓名")
while True:
if (name == '退出系统'):
break
else:
del arr[name]
break
elif caozuo == '列出所有学生':
if (arr):
print(arr)
elif caozuo == '统计班级成绩':
print("统计")
chineselist = []
mathlist = []
englishlist = []
peoplelist = []
for name in arr:
chineselist.append(arr[name]["语文"])
mathlist.append(arr[name]["数学"])
englishlist.append(arr[name]["英语"])
peoplelist.append(arr.keys())
print(chineselist)
print(f'语文最高分{max(chineselist)}')
print(f'数学最高分{max(mathlist)}')
print(f'英语最高分{max(englishlist)}')
print(f'语文最低分{min(chineselist)}')
print(f'数学最低分{min(mathlist)}')
print(f'英语最低分{min(englishlist)}')
allyw=0
allsx = 0
allyy = 0
for num in chineselist:
allyw+=num
for nums in mathlist:
allsx += nums
for numss in englishlist:
allyy += numss
print(f'语文平均分{int(allyw/len(chineselist))}')
print(f'数学最低分{int(allsx/len(mathlist))}')
print(f'英语最低分{int(allyy/len(englishlist))}')
ywzgfname = ""
sxzgfname = ""
yyzgfname = ""
ywzdfname = ""
sxzdfname = ""
yyzdfname = ""
for names in arr:
if (arr[names]["语文"] == max(chineselist)):
ywzgfname += names + ","
if (arr[names]["数学"] == max(mathlist)):
sxzgfname += names + ","
if (arr[names]["语文"] == max(englishlist)):
yyzgfname += names + ","
if (arr[names]["语文"] == min(chineselist)):
ywzdfname += names + ","
if (arr[names]["数学"] == min(mathlist)):
sxzdfname += names + ","
if (arr[names]["英语"] == min(englishlist)):
yyzdfname += names + ","
print(f"语文最高分学生{ywzgfname}")
print(f"数学最高分学生{sxzgfname}")
print(f"英语最高分学生{yyzgfname}")
print(f"语文最低分学生{ywzdfname}")
print(f"数学最低分学生{sxzdfname}")
print(f"英语最低分学生{yyzdfname}")
elif caozuo == "退出系统":
break

上面的练习都会做了就代表数据容器和流程控制语句知识过关了~
接下来讲面向对象,学过java的肯定知道面向对象三要素:封装,继承,多态
1.对象:一个拥有属性和行为的个体
如人的属性:姓名、性别、年龄...... ,
2.面向对象:一种以对象为中心,去思考和组织代码的方式,好处::可扩展性强,『切菜员』能给我做菜,也能给别人做菜;能做简单的菜,也能做复杂的菜。在程序中也是这个道理:我们定义的“对象”,可以被复用,多个对象之间还可以协作,一起组成更大的系统。
3.类:描述一类事物的模板,有属性和行为
4.实例:根据类创建出来的一个具体的对象又称实例,也可称为实例对象。
类的定义:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
__init__方法又叫:初始化方法,它主要用来给当前实例对象添加属性。
__init__方法收到的参数是:当前正在创建的实例对象、其他自定义参数。
创建实例
实例名 = 类名(参数1, 参数2, ...)
p1= Person("欣欣",29)
查看属性,修改属性,查看实例,也可以在创建完实例后追加属性值
#查看属性
print(p1.name)
p1.name="小美女"
#修改属性
print(p1.name)
#查看全部实例
print(p1.__dict__)
p1.address="武汉"
print(p1.__dict__)
可以自定义方法
def speek():
print("巴拉巴拉")
p1.speak=speek
print(p1.speak)#<function speek at 0x00000222E3D23EC0>
print(p1.__dict__)
{'name': '小美女', 'age': 29, 'address': '武汉', 'speak': <function speek at 0x00000222E3D23EC0>}
p1.speak()巴拉巴拉
上面讲的是实例属性,接下来是类属性,用于存放公共数据
class Person:
maxAge=30
进行实例.属性名 = xxx操作时,只会对实例自身的属性起作用(有则修改,无则添加)!
实例方法调用:类里面的方法通过实例调用
class Person:
maxAge=30
def __init__(self, name, age):
self.name = name
self.age = age
def info(self):
print(f'{self.name}年龄{self.age}')
p1= Person("欣欣",29)
#查看属性
print(p1.name)
p1.name="小美女"
p2=Person("璐璐",27)
p1.info()
p2.info()
当一个函数被定义在类中时,它就被称为方法。
使用@classmethod装饰器修饰,第一个参数是类本身,通常用形参cls接收。
类方法返回一个实例对象,可以通过类调用,也可以通过实例调用
@classmethod
def create(cls,value):
name=value
age=1
return cls(name,age)
p4=Person.create("月月")
print(p4.__dict__){'name': '月月', 'age': 1}
p4=p1.create("地球"){'name': '地球', 'age': 1}
print(p4.__dict__)
静态方法
使用@staticmethod装饰器修饰,方法没有self或cls参数,只是单纯的定义在类中。
可通过『类名』或『实例名』调用,但强烈推荐通过类名调用以体现语义。
由于没有self或cls参数,所以静态方法中通常:不访问类属性,也不访问实例属性。
一般用于:定义与类相关,但可以独立使用的工具方法。
@staticmethod
def show(card):
return card
res=p4.show("1233")
print(res)
继承:指一个类可以继承父类的方法
class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def speak(self, msg):
print(f'我叫{self.name}, 年龄是{self.age}, 性别是{self.gender},我想说:{msg}')
#定义子类
class Student(Person):
def __init__(self,name,age,gender,stu_id,grade):
super().__init__(name,age,gender)
self.stu_id=stu_id
self.grade=grade
s1=Student("李易峰",39,'男',1,1)
print(s1.__dict__)
可以对方法进行重写
class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def speak(self, msg):
print(f'我叫{self.name}, 年龄是{self.age}, 性别是{self.gender},我想说:{msg}')
#定义子类
class Student(Person):
def __init__(self,name,age,gender,stu_id,grade):
super().__init__(name,age,gender)
self.stu_id=stu_id
self.grade=grade
def speak(self, msg):
print(msg)
s1=Student("李易峰",39,'男',1,1)
print(s1.__dict__)
s1.speak("123")
isinstance() 和 issubclass() isinstance(instance, Class),作用:判断某个对象是否为指定类或其子类的实例
s1=Student("李易峰",39,'男',1,1)
s2=Person("123",11,'12')
print(s1.__dict__)
s1.speak("123")
print(isinstance(s1,Student))
print(isinstance(s1,Person))
print(isinstance(s2,Student))
print(isinstance(s2,Person))
方法2:issubclass(Class1, Class2),作用:判断某个类是否是另一个类的子类
print(issubclass(Student, Person))
print(issubclass(Person, Student))
多重继承:1个类可以继承多个父类
class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def speak(self, msg):
print(f'我叫{self.name}, 年龄是{self.age}, 性别是{self.gender},我想说:{msg}')
class Worker:
def __init__(self, company):
self.company = company
def show(self, msg):
print("worker", msg)
def show1(self, msg):
print("worker1", msg)
class Student(Person, Worker):
def __init__(self, name, age, gender, company, stu_id, grade):
Person.__init__(self, name, age, gender)
Worker.__init__(self, company)
self.stu_id = stu_id
self.grade = grade
def speak(self, msg):
print(msg)
def show(self,msg):
print("你是睡",msg)
s1=Student("李易峰",12,'男','欢瑞',1,1)
s1.show("123")
s1.speak("1")
s1.show1("123")
w1=Worker("12333")
w1.show1(1)
w1.show("1233")
权限控制
公有属性:在类外部,子类都可以访问
受保护属性:_属性名 在类外部,子类都可以访问
私有属性:__属性名 只能在类内部能访问
getter和setter同java中的一样,不再赘述
多态:
不同对象调用同一方法时候有不同的行为
class Animal:
def speak(self):
print("动物正在发出声音")
class Dog(Animal):
def speak(self):
print("汪汪汪")
class Cat(Animal):
def speak(self):
print("喵喵喵")
def make_sound(animal:Animal):
animal.speak()
a1=Animal()
d1=Dog()
c1=Cat()
make_sound(a1)
make_sound(d1)
make_sound(c1)
练习 采用面向对象的编程思想,开发一个购物车管理系统,实现商品信息的添加、修改、删除、查询功能。系统使用自定义对象存储商品数据,通过控制台菜单与用户交互。 具体功能如下: 1. 添加购物车:用户根据提示录入商品名称、以及该商品的价格、数量,保存该商品信息到购物车。 2. 修改购物车:要求用户输入要修改的购物车商品名称,然后再提示输入该商品的价格、数量,输入完成后修改该商品信息。 3. 删除购物车:要求用户输入要删除的购物车名称,根据名称删除购物车中的商品。 4. 查询购物车:将购物车中的商品信息展示出来,格式为:"商品名称: xxx, 商品价格: xxx, 商品数量: xxx"。 5. 退出购物车
# 采用面向对象的编程思想,开发一个购物车管理系统,实现商品信息的添加、修改、删除、查询功能。系统使用自定义对象存储商品数据,通过控制台菜单与用户交互。
# 具体功能如下:
# 1. 添加购物车:用户根据提示录入商品名称、以及该商品的价格、数量,保存该商品信息到购物车。
# 2. 修改购物车:要求用户输入要修改的购物车商品名称,然后再提示输入该商品的价格、数量,输入完成后修改该商品信息。
# 3. 删除购物车:要求用户输入要删除的购物车名称,根据名称删除购物车中的商品。
# 4. 查询购物车:将购物车中的商品信息展示出来,格式为:"商品名称: xxx, 商品价格: xxx, 商品数量: xxx"。
# 5. 退出购物车
class Shop:
def __init__(self, id, name, price, num):
self.id = id
self.name = name
self.price = price
self.num = num
class Manager:
def __init__(self):
self.list = []
def add(self):
id = input("请输入编号")
name = input("请输入名称")
price = input("请输入价格")
num = input("请输入数量")
s = Shop(id, name, price, num)
self.list.append(s)
def update(self):
id = input("请输入编号")
for s in self.list:
if (s.id == id):
name = input("请输入名称")
price = input("请输入价格")
num = input("请输入数量")
s.name = name
s.price = price
s.num = num
def show(self):
for s in self.list:
print(s.name, s.price, s.num)
def remove(self):
id = input("请输入编号")
for s in self.list:
if (s.id == id):
self.list.remove(s)
def run(self):
while True:
print("购物车管理")
print(" 1. 添加购物车:用户根据提示录入商品名称、以及该商品的价格、数量,保存该商品信息到购物车。")
print(
" 2. 修改购物车:要求用户输入要修改的购物车商品名称,然后再提示输入该商品的价格、数量,输入完成后修改该商品信息。")
print(" 3. 删除购物车:要求用户输入要删除的购物车名称,根据名称删除购物车中的商品。")
print(" 4. 查询购物车:将购物车中的商品信息展示出来,格式为:商品名称: xxx, 商品价格: xxx, 商品数量: xxx")
print(" 5. 退出购物车)")
choice = input("请选择")
print(choice)
if choice == '1':
self.add()
if choice == '2':
self.update()
if choice == '3':
self.remove()
if choice == '4':
self.show()
if choice == '5':
break
m1 = Manager()
m1.run()


