1.聲明?個(gè)電腦類: 屬性:品牌、顏?、內(nèi)存大小 方法:打游戲、寫代碼、看視頻
a.創(chuàng)建電腦類的對象,然后通過對象點(diǎn)的?方式獲取、修改、添加和刪除它的屬性
b.通過attr相關(guān)?方法去獲取、修改、添加和刪除它的屬性
解
class Computer:
# 聲明?個(gè)電腦類: 屬性:品牌、顏?、內(nèi)存大小 方法:打游戲、寫代碼、看視頻
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():
# 創(chuàng)建電腦類的對象:
p1 = Computer()
# 通過對象點(diǎn)的方式獲取它的屬性
print(p1.brand)
# 通過對象點(diǎn)的方式修改它的屬性
p1.color = '綠'
print(p1.color)
# 通過對象點(diǎn)的方式添加它的屬性
p1.like = 'yes'
print(p1.like)
# 通過對象點(diǎn)的方式刪除它的屬性
del p1.like
# print(p1.like) # 報(bào)錯(cuò)。AttributeError: 'Computer' object has no attribute 'like'
p2 = Computer()
# 通過attr相關(guān)方法去獲取它的屬性
print(getattr(p2, 'brand'))
# 通過attr相關(guān)方法去修改它的屬性
setattr(p2, 'color', '黃')
print(p2.color)
# 通過attr相關(guān)方法去添加它的屬性
setattr(p2, 'no_like', 'yes')
print(p2.no_like)
# 通過attr相關(guān)方法去刪除它的屬性
delattr(p2, 'no_like')
# print(p1.no_like) # 報(bào)錯(cuò)。AttributeError: 'Computer' object has no attribute 'no_like'
if __name__ == '__main__':
main()
運(yùn)行效果:
阿黃
綠
yes
阿黃
黃
yes
2.聲明?個(gè)人的類和狗的類: 狗的屬性:名字、顏色、年齡 狗的方法:叫喚 人的屬性:名字、年齡、狗 人的方法:遛狗 a.創(chuàng)建人的對象小明,讓他擁有一條狗大黃,然后讓小明去遛大黃
解
class Dog:
# 聲明?個(gè)狗的類,狗的屬性:名字、顏色、年齡 狗的方法:叫喚
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:
# 聲明?個(gè)人的類,人的屬性:名字、年齡、狗 人的方法:遛狗
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():
# 創(chuàng)建人的對象小明,讓他擁有一條狗大黃,然后讓小明去遛大黃
peo1 = People('小明', '大黃')
peo1.liu_gou()
peo2 = People('小紅')
peo2.liu_gou()
if __name__ == '__main__':
main()
運(yùn)行效果:
小明 遛出了 大黃
大黃 開始了叫喚。
小紅 沒有狗呢
3.聲明一個(gè)圓類:
解
class Garden:
# 3.聲明一個(gè)圓類:
def __init__(self, r: float):
self.r = r
def mi_ji(self):
mian_ji = 3.1415926 * float(self.r) ** 2
print('這個(gè)園的面積為: %f cm^2' % mian_ji)
def zh_chang(self):
zhou_chang = 3.1415926 * 2 * float(self.r)
print('這個(gè)圓的周長為: %f cm' % zhou_chang)
def main():
# 3.聲明一個(gè)圓對象:
g1 = Garden(3)
g1.mi_ji()
g1.zh_chang()
if __name__ == '__main__':
main()
運(yùn)行效果:
這個(gè)園的面積為: 28.274333 cm^2
這個(gè)圓的周長為: 18.849556 cm
4.
創(chuàng)建一個(gè)學(xué)生類: 屬性:姓名,年齡,學(xué)號 方法:答到,展示學(xué)生信息
創(chuàng)建一個(gè)班級類: 屬性:學(xué)生,班級名 方法:添加學(xué)生,刪除學(xué)生,點(diǎn)名, 求班上學(xué)生的平均年齡
解
import json
# 4.創(chuàng)建一個(gè)學(xué)生類: 屬性:姓名,年齡,學(xué)號 方法:答到,展示學(xué)生信息
# 創(chuàng)建一個(gè)班級類: 屬性:學(xué)生,班級名 方法:添加學(xué)生,刪除學(xué)生,點(diǎn)名, 求班上學(xué)生的平均年齡
# 創(chuàng)建一個(gè)學(xué)生類
class Student:
# 屬性:姓名,年齡,學(xué)號
def __init__(self, name, age=None, sno=None):
self.name = name
self.age = age
self.sno = sno
# 方法: 答到。建立成靜態(tài)方法,因?yàn)闆]有用到對象屬性,也不需要類的字段
@staticmethod
def da_dao(classes, sname):
# 導(dǎo)入學(xué)生信息
with open('./files/students.json', encoding='utf-8') as f:
students = json.load(f)
all_students = students[classes]
# 判斷有沒有這個(gè)人
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('無人答到')
# 方法: 展示學(xué)生信息
def show(self):
print('這個(gè)學(xué)生的信息為:\n名字: %s ;年齡: %s ;學(xué)號: %s ' % (self.name, self.age, self.sno))
class BanJi:
# 屬性: 學(xué)生,班級名
def __init__(self, classes=None, stu=None):
self.stu = stu
self.classes = classes
# 方法: 添加學(xué)生
def add_plus(self):
sname = input('請輸入要添加學(xué)生的名字:')
sage = int(input('請輸入要添加學(xué)生的年齡:'))
# 自動(dòng)生成學(xué)號;
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)
# 展示學(xué)生:
stu.show()
classes = self.classes
# 導(dǎo)入學(xué)生信息:
with open('./files/students.json', encoding='utf-8') as f:
students = json.load(f)
all_students = students[classes]
# 沒有這個(gè)班就新開一個(gè)班:
if not all_students:
students[classes] = all_students
with open('./files/students.json', 'w', encoding='utf-8') as f:
json.dump(students, f)
# 保存學(xué)生信息
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('添加成功。')
# 方法: 刪除學(xué)生
def del_plus(self):
sname = input('請輸入要?jiǎng)h除學(xué)生的名字:')
classes = self.classes
# 導(dǎo)入學(xué)生信息
with open('./files/students.json', encoding='utf-8') as f:
students = json.load(f)
all_students = students[classes]
# 找出學(xué)生并刪除
i = 0
while i < len(all_students):
if all_students[i]['sname'] == sname:
del all_students[i]
break
i += 1
# 保存學(xué)生信息
students[classes] = all_students
with open('./files/students.json', 'w', encoding='utf-8') as f:
json.dump(students, f)
print('刪除成功。')
# 方法: 點(diǎn)名
def dian_ming(self):
print('這個(gè)班的學(xué)生有:')
# 導(dǎo)入學(xué)生信息
classes = self.classes
with open('./files/students.json', encoding='utf-8') as f:
students = json.load(f)
all_students = students[classes]
# 展示一個(gè)班的學(xué)生姓名
for i in all_students:
print(i['sname'])
j = 'y'
while j == 'y':
sname = input('請輸入名字點(diǎn)名:')
stu_add = Student(sname)
stu_add.da_dao(self.classes, sname)
j = input('輸入 y 繼續(xù)點(diǎn)名(輸入其它任何字符結(jié)束點(diǎn)名):')
# 方法: 求班上學(xué)生的平均年齡
def age_sum(self):
classes = self.classes
# 導(dǎo)入學(xué)生信息
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 這個(gè)班的平均年齡為: %.2f ' % (classes, p_j))
# 展示一個(gè)班學(xué)生的所有信息
def show_stu(self):
print('這個(gè)班級的所有學(xué)生信息為:')
# 導(dǎo)入學(xué)生信息
classes = self.classes
with open('./files/students.json', encoding='utf-8') as f:
students = json.load(f)
all_students = students[classes]
# 展示一個(gè)班的學(xué)生
for i in all_students:
print(i)
def main():
# 創(chuàng)建 班級 對象
class1 = BanJi('class1')
# 添加學(xué)生
class1.add_plus()
# 展示一個(gè)班學(xué)生的所有信息
class1.show_stu()
# 點(diǎn)名
class1.dian_ming()
# 刪除學(xué)生
class1.del_plus()
# 展示一個(gè)班學(xué)生的所有信息
class1.show_stu()
# 點(diǎn)名
class1.dian_ming()
# 求班上學(xué)生的平均年齡
class1.age_sum()
if __name__ == '__main__':
main()
運(yùn)行效果:
請輸入要添加學(xué)生的名字:阿黃
請輸入要添加學(xué)生的年齡:3
這個(gè)學(xué)生的信息為:
名字: 阿黃 ;年齡: 3 ;學(xué)號: 163006090003
添加成功。
這個(gè)班級的所有學(xué)生信息為:
{'sno': 163006091001, 'sname': '瀧澤蘿拉', 'sage': 18}
{'sno': 163006091002, 'sname': '蒼井空', 'sage': 19}
{'sno': '2', 'sname': '阿黃', 'sage': 3}
這個(gè)班的學(xué)生有:
瀧澤蘿拉
蒼井空
阿黃
請輸入名字點(diǎn)名:瀧澤蘿拉
瀧澤蘿拉 答:"到"
輸入 y 繼續(xù)點(diǎn)名(輸入其它任何字符結(jié)束點(diǎn)名):y
請輸入名字點(diǎn)名:蒼井空
蒼井空 答:"到"
輸入 y 繼續(xù)點(diǎn)名(輸入其它任何字符結(jié)束點(diǎn)名):y
請輸入名字點(diǎn)名:阿黃
阿黃 答:"到"
輸入 y 繼續(xù)點(diǎn)名(輸入其它任何字符結(jié)束點(diǎn)名):n
請輸入要?jiǎng)h除學(xué)生的名字:阿黃
刪除成功。
這個(gè)班級的所有學(xué)生信息為:
{'sno': 163006091001, 'sname': '瀧澤蘿拉', 'sage': 18}
{'sno': 163006091002, 'sname': '蒼井空', 'sage': 19}
這個(gè)班的學(xué)生有:
瀧澤蘿拉
蒼井空
請輸入名字點(diǎn)名:阿黃
無人答到
輸入 y 繼續(xù)點(diǎn)名(輸入其它任何字符結(jié)束點(diǎn)名):n
class1 這個(gè)班的平均年齡為: 18.50