day11

  1 """
  2     信息管理系统
  3         信息 -- 学生信息
  4 
  5     步骤:
  6         (一)
  7         数据模型类:StudentModel
  8             数据:编号 id,姓名 name,年龄 age,成绩 score
  9         逻辑控制类:StudentManagerController
 10             数据:学生列表 __stu_list
 11             行为:获取列只读属性 stu_list,
 12                  添加学生 add_student(stu_info)
 13                       给stu_info创建学生编号
 14                       存储学生
 15         测试:添加学生功能、获取所有学生功能.
 16         (二)在逻辑控制类中,完成删除学生功能,返回是否删除成功.
 17               remove_student(stu_id)
 18         (三)修改学生
 19              update_studenet(stu_info)
 20                 在学生列表中,根据stu_info.id查找学生对象
 21                 修改其信息
 22         (四)根据成绩从大到小排序order_by_score()
 23         (五)创建界面视图类StudentManagerView
 24                显示菜单__display_menu()
 25                      print("1....")
 26                选择菜单 __select_menu():
 27                      if input("请输入:") == "1":
 28                           __input_students():
 29                入口 main():
 30                     while True:
 31                       __display_menu()
 32                       __select_menu()
 33 
 34                录入学生信息 __input_students():
 35                     while True:
 36                           input("请输入姓名:")...
 37                           调用控制器中的add_student方法
 38         (六)显示所有学生信息
 39          (七) 删除学生__delete_student
 40                  获取需要删除的学生编号
 41                  调用控制器中的remove_student方法
 42                  提示:"删除成功"  或者 "删除失败"
 43          (八)修改学生信息__modify_student()
 44                 获取需要修改的学生信息
 45                 调用控制器中的update_student方法
 46          (九) 按照成绩从高到低显示
 47                 16:50
 48 """
 49 
 50 
 51 class StudentModel:
 52     """
 53         学生数据模型
 54     """
 55 
 56     def __init__(self, name="", age=0, score=0.0):
 57         self.id = 0  # 真实数据在添加学生时确定
 58         self.name = name
 59         self.age = age
 60         self.score = score
 61 
 62 
 63 class StudentManagerController:
 64     """
 65         学生管理控制器:主要负责处理程序的主要逻辑(算法)。
 66     """
 67     # 学生的初始编号
 68     __init_id = 1000
 69 
 70     @classmethod
 71     def __generate_id(cls):
 72         cls.__init_id += 1
 73         return cls.__init_id
 74 
 75     def __init__(self):
 76         self.__stu_list = []
 77 
 78     @property
 79     def stu_list(self):
 80         return self.__stu_list
 81 
 82     def add_student(self, stu_info):
 83         """
 84             添加学生,由界面获取学生信息方法调用。
 85         :param stu_info:需要添加的学生对象(信息)
 86         """
 87         stu_info.id = StudentManagerController.__generate_id()
 88         self.__stu_list.append(stu_info)
 89 
 90     def remove_student(self, stu_id):
 91         for item in self.__stu_list:
 92             if item.id == stu_id:
 93                 self.__stu_list.remove(item)
 94                 return True  # 删除成功
 95         return False  # 删除失败
 96 
 97     def update_student(self, stu_info):
 98         """
 99             根据stu_info.id修改学生的信息(stu_info.name/stu_info.age..)
100         :param stu_info:需要修改的学生信息
101         :return:是否修改成功
102         """
103         for item in self.__stu_list:
104             if item.id == stu_info.id:
105                 item.name = stu_info.name
106                 item.score = stu_info.score
107                 item.age = stu_info.age
108                 return True  # 修改成功
109         return False  # 修改失败
110 
111     def order_by_score(self):
112         for r in range(len(self.__stu_list)):
113             for c in range(r + 1, len(self.__stu_list)):
114                 if self.__stu_list[r].score < self.__stu_list[c].score:
115                     self.__stu_list[r], self.__stu_list[c] = self.__stu_list[c], self.__stu_list[r]
116 
117 
118 class StudentManagerView:
119     def __init__(self):
120         self.__manager = StudentManagerController()
121 
122     def __display_menu(self):
123         print("""
124 1) 添加学生信息
125 2) 显示学生信息
126 3) 删除学生信息
127 4) 修改学生信息
128 5) 按照成绩从高到低显示 
129         """)
130 
131     def __select_menu(self):
132         item = input("请输入选项:")
133         if item == "1":
134             self.__input_students()
135         elif item == "2":
136             self.__output_students()
137         elif item == "3":
138             self.__delete_student()
139         elif item == "4":
140             self.__modify_student()
141         elif item == "5":
142             self.__outout_student_by_score()
143 
144     def main(self):
145         while True:
146             self.__display_menu()
147             self.__select_menu()
148 
149     def __input_students(self):
150         while True:
151             name = input("请输入姓名:")
152             age = int(input("请输入年龄:"))
153             score = float(input("请输入成绩:"))
154             stu = StudentModel(name, age, score)
155             # StudentManagerController().add_student(....)
156             self.__manager.add_student(stu)
157             if input("输入e退出:") == "e":
158                 break
159 
160     def __output_students(self):
161         for item in self.__manager.stu_list:
162             print(item.id, item.name, item.age, item.score)
163 
164     def __delete_student(self):
165         id = int(input("请输入需要删除的编号:"))
166         if self.__manager.remove_student(id):
167             print("删除成功")
168         else:
169             print("删除失败")
170 
171     def __modify_student(self):
172         stu = StudentModel()
173         stu.id = input("请输入需要修改的学生编号:")
174         stu.name = input("请输入需要修改的学生姓名:")
175         stu.age = input("请输入需要修改的学生年龄:")
176         stu.score = input("请输入需要修改的学生成绩:")
177 
178         if self.__manager.update_student(stu):
179             print("修改成功")
180         else:
181             print("修改失败")
182 
183     def __outout_student_by_score(self):
184         self.__manager.order_by_score()
185         self.__output_students()
186 
187 
188 # 测试.....................
189 view = StudentManagerView()
190 view.main()
191 
192 """
193 manager = StudentManagerController()
194 s01 = StudentModel("赵敏", 26, 100)
195 manager.add_student(StudentModel("灭绝", 56, 85))
196 manager.add_student(s01)
197 
198 # manager.remove_student(1002)
199 s02 = StudentModel("敏儿", 27, 95)
200 s02.id = 1001
201 
202 manager.update_student(s02)
203 
204 # 内部修改实例变量__stu_list
205 manager.order_by_score()
206 
207 # 获取属性(实例变量__stu_list)
208 for item in manager.stu_list:
209     print(item.name, item.score)
210 """
   #review
1
""" 2 复习 3 封装 4 数据角度:多种数据 合为 一种数据 5 优势:代码可读性高 6 将数据与行为相关联 7 例如:老婆(姓名,体重,身高...) 8 9 行为角度:提供[必要]功能,隐藏实现细节(方法体,方法本身). 10 隐藏成员:以双下划线命名 11 属性:保护数据(加工数据,只读,只写) 12 def __init__(self,参数): 13 self.实例变量名 = 参数 14 15 @property -- 创建property对象,绑定读取方法 16 def 实例变量名(self): 17 return self.__实例变量名 18 19 @实例变量名.setter 20 def 实例变量名(self,value): 21 self.__实例变量名 = value 22 23 设计角度: 24 分而治之:需求分解为多个类(行为) 25 变则疏之:将变化点单独定义到类中 26 27 高内聚:一个类的内部 干一件事. 单一职责 28 低耦合:类与类的关系 松散. 29 30 类与类行为不同,对象与对象数据不同。 31 32 33 34 35 36 37 38 """
中秋节作业
参照信息管理系统架构,重构购物车(mvc).
                    day08/day07_exercise/shopping.py
 1 #homework01
 2 
 3 """
 4 创建手机类(名称, 价格,  重量,大小(宽  ,  高, 厚度))
 5                0-15000  2-10   2-10   2-20  0.1 - 2
 6    要求:限制数据不超过以上范围
 7 """
 8 
 9 
10 class MobilePhone:
11     """
12         移动电话
13     """
14 
15     def __init__(self, name="", price=0.0, weight=0, size=()):
16         self.name = name
17         self.price = price
18         self.weight = weight
19         self.size = size
20 
21     @property
22     def price(self):
23         return self.__price
24 
25     @price.setter
26     def price(self, value):
27         if 0 <= value <= 15000:
28             self.__price = value
29         else:
30             raise Exception("数据不在范围")
31 
32     @property
33     def weight(self):
34         return self.__weight
35 
36     @weight.setter
37     def weight(self, value):
38         if 2 <= value <= 10:
39             self.__weight = value
40         else:
41             raise Exception("数据不在范围")
42 
43     @property
44     def size(self):
45         return self.__size
46 
47     @size.setter
48     def size(self, value):
49         if 2 <= value[0] <= 10 and 2 <= value[1] <= 20 and 0.1 <= value[2] <= 2:
50             self.__size = value
51         else:
52             raise Exception("数据不在范围")
53 
54 
55 m01 = MobilePhone("三星手机", 5000, 5, (5, 10, 0.8))
56 print(m01.name)
57 print(m01.price)
58 print(m01.weight)
59 print(m01.size)
 1 #homework02
 2 
 3 """
 4     玩家攻击(攻击力)敌人,敌人受伤(减血)后可能死亡(播放死亡动画)
 5     敌人攻击(攻击力)玩家,玩家受伤(减血,碎屏)后可能死亡(游戏结束)
 6 """
 7 # 分析三个设计案例
 8 # 10:20 上课
 9 
10 class Enemy:
11     def __init__(self, hp=0, atk=0):
12         self.hp = hp
13         self.atk = atk
14 
15     def damage(self, value):
16         print("敌人受伤减血啦")
17         self.hp -= value
18         if self.hp <= 0:
19             self.death()
20 
21     def death(self):
22         print("播放死亡动画")
23 
24     def attack(self, target):
25         print("敌人发起了攻击")
26         target.damage(self.atk)
27 
28 
29 class Player:
30     def __init__(self, hp=0, atk=0):
31         self.atk = atk
32         self.hp = hp
33 
34     def attack(self, target):
35         print("玩家发起了攻击")
36         # Enemy(100).damage(self.atk)
37         target.damage(self.atk)
38 
39     def damage(self, value):
40         print("玩家受伤减血,碎屏。")
41         self.hp -= value
42         if self.hp <= 0:
43             self.death()
44 
45     def death(self):
46         print("游戏结束")
47 
48 
49 e01 = Enemy(1000, 100)
50 p01 = Player(5000, 500)
51 p01.attack(e01)
52 e01.attack(p01)
53 p01.attack(e01)

 

转载于:https://www.cnblogs.com/xiaoliangliu86/p/11529675.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值