翼度科技»论坛 编程开发 python 查看内容

三道关于python面向对象的练习题

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
1.题目
  1. 小明和小美都爱跑步
  2. 小明体重 75 公斤
  3. 小美体重 45 公斤
  4. 每次跑步会减肥 0.5 公斤
  5. 每次吃东西体重增加 1 公斤
复制代码
需求分析

小明、小美都是一个具体的对象,他们都是人,所以应该抽象成人类
小明、小美是具体的对象的姓名,而体重是另一个属性,所以有两个属性
跑步、吃东西都是一种行为,所以也有两个方法
类图


实现代码
  1. class Person:
  2.     # 构造方法
  3.     def __init__(self, name, weight):
  4.         # 两个实例属性
  5.         self.name = name
  6.         self.weight = weight
  7.     # 打印实例对象会返回的内容
  8.     def __str__(self):
  9.         return f"名字:{self.name} 体重:{self.weight} 很爱跑步"
  10.     # 跑步实例方法
  11.     def run(self):
  12.         print(f"{self.name} 在跑步,体重减少0.5公斤")
  13.         self.weight -= 0.5
  14.     # 吃饭实例方法
  15.     def eat(self):
  16.         print(f"{self.name} 在吃饭,体重增加1公斤")
  17.         self.weight += 1
  18. # 实例对象一:小明
  19. xiaoming = Person("小明", 75)
  20. print(xiaoming)
  21. xiaoming.eat()
  22. xiaoming.run()
  23. print(xiaoming)
  24. # 实例对象二:小美
  25. xiaomei = Person("小美", 45)
  26. print(xiaomei)
  27. xiaomei.eat()
  28. xiaomei.run()
  29. print(xiaomei)
  30. # 输出结果
  31. 名字:小明 体重:75 很爱跑步
  32. 小明 在吃饭,体重增加1公斤
  33. 小明 在跑步,体重减少0.5公斤
  34. 名字:小明 体重:75.5 很爱跑步
  35. 名字:小美 体重:45 很爱跑步
  36. 小美 在吃饭,体重增加1公斤
  37. 小美 在跑步,体重减少0.5公斤
  38. 名字:小美 体重:45.5 很爱跑步
复制代码
2.题目

设计一个类Person,生成若干实例,在终端输出如下信息
  1. 小明,10岁,男,上山去砍柴
  2. 小明,10岁,男,开车去东北
  3. 小明,10岁,男,最爱大保健
  4. 老李,90岁,男,上山去砍柴
  5. 老李,90岁,男,开车去东北
  6. 老李,90岁,男,最爱大保健
复制代码
实际代码

并不代表最优代码,大家有更好的写法可以评论下
  1. class person:
  2.     # 构造方法,为实例对象初始化属性
  3.     def __init__(self, name, age, sex):
  4.         self.name = name
  5.         self.age = age
  6.         self.sex = sex
  7.    
  8.     # 获取对象属性的方法
  9.     def GetSelfMessage(self):
  10.         return self.name, self.age, self.sex
  11.    
  12.     # 实例方法,用于实例对象执行某种行为
  13.     def DoSomething(self, doing):
  14.         print(*self.GetSelfMessage(), doing)
  15. # 实例对象一
  16. xiaoming = person("小明", 10, "男")
  17. xiaoming.DoSomething("上山砍柴")
  18. xiaoming.DoSomething("开车去东北")
  19. xiaoming.DoSomething("大保健")
  20. # 实例对象二
  21. laoli = person("老李", 90, "男")
  22. laoli.DoSomething("上山砍柴")
  23. laoli.DoSomething("开车去东北")
  24. laoli.DoSomething("大保健")
  25. # 输出结果
  26. 小明 10 男 上山砍柴
  27. 小明 10 男 开车去东北
  28. 小明 10 男 大保健
  29. 老李 90 男 上山砍柴
  30. 老李 90 男 开车去东北
  31. 老李 90 男 大保健
复制代码
3.题目
  1. 房子(House)有户型、总面积、家具名称列表;新房子没有任何的家具
  2. 家具(HouseItem)有名字、占地面积
  3. 席梦思(bed) 占地 4 平米
  4. 衣柜(bed) 占地 2 平米
  5. 餐桌(bed) 占地 1.5 平米
  6. 将以上三个家具添加到房子中
  7. 打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
复制代码
需求分析

家具有两个属性,房子表面上有三个属性
新房子没有任何的家具,代表构造方法不需要给家具名称列表属性初始化赋值
但房子其实还有一个特殊属性,剩余面积,它的初始值应该和总面积相同
房子添加家具后,剩余面积应该减掉家具的占地面积
席梦思、衣柜、餐桌都是一个具体的对象,都是家具类的实例对象
思考:房子、家具两个类应该先开发哪个类

家具类
因为家具类简单,只有两个方法,且没有行为
房子要使用到家具,被依赖的类,通常应该先开发,可以避免在开发主类过程中,要中途插入开发被依赖的类
类图


实现代码

家具类
  1. class HouseItem:
  2.     # 构造方法
  3.     def __init__(self, name, area):
  4.         self.name = name
  5.         self.area = area
  6.     def __str__(self):
  7.         return f"家具名称:{self.name} 占地面积:{self.area}"
复制代码
房子类
  1. class House:
  2.     # 构造方法
  3.     def __init__(self, type, area):
  4.         self.house_type = type
  5.         self.area = area
  6.         # 剩余面积
  7.         self.free_area = self.area
  8.         # 家具名称列表
  9.         self.item_list = []
  10.     # str
  11.     def __str__(self):
  12.         return f"户型:{self.house_type}\n" \
  13.                f"总面积:{self.area}\n" \
  14.                f"剩余面积:{self.free_area}\n" \
  15.                f"家具:{self.item_list}\n"
  16.         # Python小白学习交流群:153708845
  17.     # 添加家具
  18.     def add_item(self, item):
  19.         # 1、家具占地面积>剩余面积
  20.         if item.area > self.free_area:
  21.             print("剩余面积不足以添加 ", item.name)
  22.             return
  23.         # 2、添加家具名称
  24.         self.item_list.append(item.name)
  25.         # 3、计算剩余面积
  26.         self.free_area -= item.area
复制代码
执行代码
  1. # 创建三个家具
  2. bed = HouseItem("席梦思", 4)
  3. chest = HouseItem("衣柜", 2)
  4. table = HouseItem("餐桌", 1.5)
  5. # 创建房子实例对象
  6. poloHouse = House("120平复试", 120)
  7. # 添加家具
  8. poloHouse.add_item(bed)
  9. poloHouse.add_item(chest)
  10. poloHouse.add_item(table)
  11. # 打印房子信息
  12. print(poloHouse)
  13. # 输出结果
  14. 户型:120平复试
  15. 总面积:120
  16. 剩余面积:112.5
  17. 家具:['席梦思', '衣柜', '餐桌']
复制代码
来源:https://www.cnblogs.com/xxpythonxx/p/17782921.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具