1.声明⼀个电脑类: 属性:品牌、颜⾊、内存大小 方法:打游戏、写代码、看视频
a.创建电脑类的对象,然后通过对象点的⽅方式获取、修改、添加和删除它的属性
b.通过attr相关⽅方法去获取、修改、添加和删除它的属性
解
class Computer:
# 声明⼀个电脑类: 属性:品牌、颜⾊、内存大小 方法:打游戏、写代码、看视频
def __init__(self, brand='阿黄', color='黑', memory='128G'):
self.brand = brand
self.color = color
self.memory = memory
@staticmethod
def play():
print('玩游戏')
@staticmethod
def write():
print('写代码')
@staticmethod
def look():
print('看视频')
def main():
# 创建电脑类的对象:
p1 = Computer()
# 通过对象点的方式获取它的属性
print(p1.brand)
# 通过对象点的方式修改它的属性
p1.color = '绿'
print(p1.color)
# 通过对象点的方式添加它的属性
p1.like = 'yes'
print(p1.like)
# 通过对象点的方式删除它的属性
del p1.like
# print(p1.like) # 报错。AttributeError: 'Computer' object has no attribute 'like'
p2 = Computer()
# 通过attr相关方法去获取它的属性
print(getattr(p2, 'brand'))
# 通过attr相关方法去修改它的属性
setattr(p2, 'color', '黄')
print(p2.color)
# 通过attr相关方法去添加它的属性
setattr(p2, 'no_like', 'yes')
print(p2.no_like)
# 通过attr相关方法去删除它的属性
delattr(p2, 'no_like')
# print(p1.no_like) # 报错。AttributeError: 'Computer' object has no attribute 'no_like'
if __name__ == '__main__':
main()
运行效果:
阿黄
绿
yes
阿黄
黄
yes
2.声明⼀个人的类和狗的类: 狗的属性:名字、颜色、年龄 狗的方法:叫唤 人的属性:名字、年龄、狗 人的方法:遛狗 a.创建人的对象小明,让他拥有一条狗大黄,然后让小明去遛大黄
解
class Dog:
# 声明⼀个狗的类,狗的属性:名字、颜色、年龄 狗的方法:叫唤
def __init__(self, name, color=None, age=None):
self.name = name
self.color = color
self.age = age
def jiao_huan(self):
print(' %s 开始了叫唤。 ' % self.name)
class People:
# 声明⼀个人的类,人的属性:名字、年龄、狗 人的方法:遛狗
def __init__(self, name, dog, age=None):
self.name = name
self.age = age
self.dog = dog
def liu_gou(self):
if self.dog:
print(' %s 遛出了 %s ' % (self.name, self.dog))
the_dog = Dog(self.dog)
the_dog.jiao_huan()
else:
print(' %s 没有狗呢' % self.name)
def main():
# 创建人的对象小明,让他拥有一条狗大黄,然后让小明去遛大黄
peo1 = People('小明', '大黄')
peo1.liu_gou()
peo2 = People('小红')
peo2.liu_gou()
if __name__ == '__main__':
main()
运行效果:
小明 遛出了 大黄
大黄 开始了叫唤。
小红 没有狗呢
3.声明一个圆类:
解
class Garden:
# 3.声明一个圆类:
def __init__(self, r: float):
self.r = r
def mi_ji(self):
mian_ji = 3.1415926 * float(self.r) ** 2
print('这个园的面积为: %f cm^2' % mian_ji)
def zh_chang(self):
zhou_chang = 3.1415926 * 2 * float(self.r)
print('这个圆的周长为: %f cm' % zhou_chang)
def main():
# 3.声明一个圆对象:
g1 = Garden(3)
g1.mi_ji()
g1.zh_chang()
if __name__ == '__main__':
main()
运行效果:
这个园的面积为: 28.274333 cm^2
这个圆的周长为: 18.849556 cm
4.
创建一个学生类: 属性:姓名,年龄,学号 方法:答到,展示学生信息
创建一个班级类: 属性:学生,班级名 方法:添加学生,删除学生,点名, 求班上学生的平均年龄
解
import json
# 4.创建一个学生类: 属性:姓名,年龄,学号 方法:答到,展示学生信息
# 创建一个班级类: 属性:学生,班级名 方法:添加学生,删除学生,点名, 求班上学生的平均年龄
# 创建一个学生类
class Student:
# 属性:姓名,年龄,学号
def __init__(self, name, age=None, sno=None):
self.name = name
self.age = age
self.sno = sno
# 方法: 答到。建立成静态方法,因为没有用到对象属性,也不需要类的字段
@staticmethod
def da_dao(classes, sname):
# 导入学生信息
with open('./files/students.json', encoding='utf-8') as f:
students = json.load(f)
all_students = students[classes]
# 判断有没有这个人
i = 0
while i < len(all_students):
if all_students[i]['sname'] == sname:
print(' %s 答:"到"' % all_students[i]['sname'])
break
else:
i += 1
else:
print('无人答到')
# 方法: 展示学生信息
def show(self):
print('这个学生的信息为:\n名字: %s ;年龄: %s ;学号: %s ' % (self.name, self.age, self.sno))
class BanJi:
# 属性: 学生,班级名
def __init__(self, classes=None, stu=None):
self.stu = stu
self.classes = classes
# 方法: 添加学生
def add_plus(self):
sname = input('请输入要添加学生的名字:')
sage = int(input('请输入要添加学生的年龄:'))
# 自动生成学号;
with open('./files/sno.txt',encoding='utf-8') as f:
sno = f.read()
add_sno = sno.rjust(4, '0')
new_sno = '16300609' + add_sno
stu = Student(sname, sage, int(new_sno) + 1)
new_sno_plus = str(int(sno) + 1)
with open('./files/sno.txt', 'w', encoding='utf-8') as f:
f.write(new_sno_plus)
# 展示学生:
stu.show()
classes = self.classes
# 导入学生信息:
with open('./files/students.json', encoding='utf-8') as f:
students = json.load(f)
all_students = students[classes]
# 没有这个班就新开一个班:
if not all_students:
students[classes] = all_students
with open('./files/students.json', 'w', encoding='utf-8') as f:
json.dump(students, f)
# 保存学生信息
list1 = [('sno', sno), ('sname', sname), ('sage', sage)]
dict1 = dict(list1)
all_students.append(dict1)
students[classes] = all_students
with open('./files/students.json', 'w', encoding='utf-8') as f:
json.dump(students, f)
print('添加成功。')
# 方法: 删除学生
def del_plus(self):
sname = input('请输入要删除学生的名字:')
classes = self.classes
# 导入学生信息
with open('./files/students.json', encoding='utf-8') as f:
students = json.load(f)
all_students = students[classes]
# 找出学生并删除
i = 0
while i < len(all_students):
if all_students[i]['sname'] == sname:
del all_students[i]
break
i += 1
# 保存学生信息
students[classes] = all_students
with open('./files/students.json', 'w', encoding='utf-8') as f:
json.dump(students, f)
print('删除成功。')
# 方法: 点名
def dian_ming(self):
print('这个班的学生有:')
# 导入学生信息
classes = self.classes
with open('./files/students.json', encoding='utf-8') as f:
students = json.load(f)
all_students = students[classes]
# 展示一个班的学生姓名
for i in all_students:
print(i['sname'])
j = 'y'
while j == 'y':
sname = input('请输入名字点名:')
stu_add = Student(sname)
stu_add.da_dao(self.classes, sname)
j = input('输入 y 继续点名(输入其它任何字符结束点名):')
# 方法: 求班上学生的平均年龄
def age_sum(self):
classes = self.classes
# 导入学生信息
with open('./files/students.json', encoding='utf-8') as f:
students = json.load(f)
all_students = students[classes]
# 求和
sum1 = 0
for i in all_students:
sum1 += i['sage']
p_j = sum1 / len(all_students)
print(' %s 这个班的平均年龄为: %.2f ' % (classes, p_j))
# 展示一个班学生的所有信息
def show_stu(self):
print('这个班级的所有学生信息为:')
# 导入学生信息
classes = self.classes
with open('./files/students.json', encoding='utf-8') as f:
students = json.load(f)
all_students = students[classes]
# 展示一个班的学生
for i in all_students:
print(i)
def main():
# 创建 班级 对象
class1 = BanJi('class1')
# 添加学生
class1.add_plus()
# 展示一个班学生的所有信息
class1.show_stu()
# 点名
class1.dian_ming()
# 删除学生
class1.del_plus()
# 展示一个班学生的所有信息
class1.show_stu()
# 点名
class1.dian_ming()
# 求班上学生的平均年龄
class1.age_sum()
if __name__ == '__main__':
main()
运行效果:
请输入要添加学生的名字:阿黄
请输入要添加学生的年龄:3
这个学生的信息为:
名字: 阿黄 ;年龄: 3 ;学号: 163006090003
添加成功。
这个班级的所有学生信息为:
{'sno': 163006091001, 'sname': '泷泽萝拉', 'sage': 18}
{'sno': 163006091002, 'sname': '苍井空', 'sage': 19}
{'sno': '2', 'sname': '阿黄', 'sage': 3}
这个班的学生有:
泷泽萝拉
苍井空
阿黄
请输入名字点名:泷泽萝拉
泷泽萝拉 答:"到"
输入 y 继续点名(输入其它任何字符结束点名):y
请输入名字点名:苍井空
苍井空 答:"到"
输入 y 继续点名(输入其它任何字符结束点名):y
请输入名字点名:阿黄
阿黄 答:"到"
输入 y 继续点名(输入其它任何字符结束点名):n
请输入要删除学生的名字:阿黄
删除成功。
这个班级的所有学生信息为:
{'sno': 163006091001, 'sname': '泷泽萝拉', 'sage': 18}
{'sno': 163006091002, 'sname': '苍井空', 'sage': 19}
这个班的学生有:
泷泽萝拉
苍井空
请输入名字点名:阿黄
无人答到
输入 y 继续点名(输入其它任何字符结束点名):n
class1 这个班的平均年龄为: 18.50
网友评论