1.需求
1.小明和小美都爱跑步
2.小美体重45.0公斤
3.小明体重75.0公斤
4.每次跑步都会减少0.5公斤
5.每次吃东西都会增加1公斤
class People():
def __init__(self,name,weight): 定义初始化方法,把对象和属性打包封装在一起赋值变量
self.name = name
self.weight = weight
def __str__(self): 定义str方法
return '我的名字是%s,体重是%.2f斤' %(self.name,self.weight)
def run(self): 定义跑的方法
print('%s 爱跑步' %self.name)
self.weight -= 0.5
def eat(self): 定义吃的方法
print('%s吃东西' %self.name)
self.weight += 1
xiaoming = People('小明',75.0) 创建对象
xiaoming.run() 调用run()方法
print(xiaoming) 直接使用str方法
xiaomei = People('小美',45.0)
xiaomei.eat()
print(xiaomei)
打印结果
小明 爱跑步
我的名字是小明,体重是74.50斤
小美吃东西
我的名字是小美,体重是46.00斤
2.习题
房子有户型,总面积和家具名称列表
新房子没有任何的家具
家具有名字和占地面积,其中
(bed)床:占4平米
(wardrobe)衣柜:占2平米
(table)餐桌:占1.5平米
将以上三件家具添加到房子中,打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表
定义家具类
class Furniture():
def __init__(self,name,area): 定义初始化方法封装对象和属性,self就是对象
self.name = name
self.area = area
def __str__(self): 定义str方法返回值
return '[%s]占地面积:%.2f' %(self.name,self.area)
# bed = Furniture('bed',4) 创建对象
# print(bed) 初始化对象
定义房子的类
class House():
def __init__(self,house_type,area): 把对象和属性封装起来
定义类属性也就是变量
self.house = house_type 房子户型
self.area = area 房子面积
self.free_area = area 剩余面积
self.item_list = [] 家具名称列表,空房子列表为空
定义方法其实就是写函数
def __str__(self): 定义str方法,返回值
return ('户型:%s\n总面积:%.2f[剩余面积:%.2f]\n家具:%s'
%(self.house,self.area,self.free_area,self.item_list))
def add_item(self,item): 添加家具及判断家具和房子面积
if item.area > self.free_area: 判定家具面积大于房子剩余面积
print('%s的面积太大,无法添加' %(item.name))
return False
添加家具
self.item_list.append(item.name)
self.free_area -= item.area 计算剩余面积
家具类实列化
bed = Furniture('bed',4)
wardrobe = Furniture('wardrobe',2)
table = Furniture('table',1.5)
房子类实列化
my_house = House('别墅',500) 房子名称和大小
调用add_item()添加家具
my_house.add_item(bed) 添加床
my_house.add_item(wardrobe) 衣柜
my_house.add_item(table) 餐桌桌子
print(my_house) 打印
打印结果
户型:别墅
总面积:500.00[剩余面积:492.50]
家具:['bed', 'wardrobe', 'table']
3.习题
使用类和对象实现对栈的基本操作
定义类
class Stack(): 类名称
def __init__(self): 定义初始化方法,self就是对象
self.stack = [] 属性就是变量定义一个空栈
def push(self,value): push入栈
self.stack.append(value)
return True
def pop(self): pop出栈
if self.stack: 先判断栈是否为空,空即假,非空为真
item = self.stack.pop() 随机弹出一个元素,默认最后一个
return item 返回弹出值信息
else: 为空
return False 返回False
def top(self): 求栈的栈顶元素方法
if self.stack: 判断不为空
return self.stack[-1] 栈的下表为-1
else:
return False 栈为空返回False
def length(self): 求栈的长度
return len(self.stack) 直接使用len()函数求长度
def view(self): 查看栈的元素
return ','.join(self.stack) 以逗号为间隔把元素连接起来
s = Stack() 创建对象
s.push('1') 入栈
s.push('2')
s.push('0')
item = s.pop() 出栈
print(s.view()) 查栈的元素
打印结果
1,2 栈的元素
4.习题
士兵瑞恩有一把ak47
士兵可以开火(开火扣动的是班级)
抢能够发射子弹(把子弹打出去)
抢能够装子弹–增加子弹数量
class Gun(object): 定义抢类
def __init__(self,model): 抢的名字model
self.model = model
self.bullet_count = 0 子弹数为0
def add_bullet(self,count): 给抢添加子弹
self.bullet_count += count
def shoot(self): 设计
if self.bullet_count <= 0 : 挡枪里面的子弹数小于等于0
print('%s没有子弹' %(self.model)) 打印没有子弹
else:
self.bullet_count -= 1 否则每射击一次子弹数量减1,求子弹余数
print('%s的子弹数量为%s' %(self.model,self.bullet_count)) 打印子弹余数
class Soldier(object): 定义士兵类
def __init__(self,name): 士兵名字
self.name =name
self.gun = None 士兵没有抢
def fire(self): 士兵开枪
if self.gun == None: 判断=None
print('%s没有枪' %(self.name)) 打印没有抢
else:
self.gun.add_bullet(5) 否则给抢添加5颗子弹
self.gun.shoot() 射击
ak47 = Gun('AK47') 实列化抢
ak47.add_bullet(10) 给抢添加子弹
ak47.shoot() 射击
ruien = Soldier('RE') 实列化士兵
ruien.gun = ak47 给士兵枪
ruien.fire() 士兵开枪
打印结果
AK47的子弹数量为9
AK47的子弹数量为13