18课零基础快速学python共享单车编程完整代码
明确项目目的
分析流程,拆解项目
逐步解决,逐渐完善
Bike类
Manage类
这个项目是我们使用面向对象编程思维完成的第一个项目,完成的路上会面临很多问题,你可不要方,一点一滴的解决,淡定哦。
回顾了一下完成一个项目的流程,那我们就开始进入第一个流程,明确项目目的。今天我们要完成的任务是帮共享单车公司完成一个共享单车的租借平台。 在这个共享平台中,大家可以查看到所有的单车,能够进行租借、还车功能,也可以把自己的单车共享出来,放在平台上,让其他人使用。
明确了项目目的,感觉还可以,人家的需求可以实现。那么接下来,我们就开始分析项目流程,拆解项目。这节课这个项目,我们要使用面向对象编程思维来完成。既然是面向对象编程,也就是类、对象、实例化;最主要的就是类。那么,我们需要写多少个类呢?需要定义多少个属性呢?需要定义多少个方法呢?
既然是共享单车租借系统,手段是租借,对象是单车。那么,我们就先创建两个类。一个单车类Bike,用来实例化单车对象,绑定单车的属性。一个平台管理类Manage,将查询车辆,共享车辆,租借车辆,归还车辆功能封装到该类中。并且,当平台管理类Manage实例化对象时,可以给用户弹出一个菜单,让用户选择不同的功能。
将所需的Bike类与Manage分析整理后,这个程序的骨架就是:
好了, 有了这个基本骨架 , 我们就可以逐步解决问题,实现代码了。
我们依据由简入难的思路,先来完成第一个简单的类,Bike类。每辆车都有基本的属性:车辆编号,使用年限,租借状态。我们利用初始化__init__ ,让实例被创建时自动获取这些属性。
自己试一下, 看看能否编写出所需代码:
class Bike:
#初始化方法 NO代表车辆编号、age代表车辆年限、
#state代表车辆状态,0代表待租借,1代表租借中
def __init__(self,NO,age,state=0):
self.NO = NO
self.age = age
self.state = state
bike = Bike(1001,2)
print(bike.NO)
初始化init方法中,我们将车辆状态state参数的默认值设置为0,用来表示待租借,用1来表示租借中。
代码还没完,我们目前只完成Bike类的属性, 接下来我们还要完成Bike的方法。
我们给Bike类设置一个类方法info用来展示车辆信息。接下来,我们使用Bike类创建一个实例,调用info方法。
#初始化方法 no代表车辆编号、age代表车辆年限、
def info (self):
if self.state == 0:
status = '待租借'
else:
status = '租借中'
return '车辆编号%d 已经运行%d年,车辆状态:%s' %(self.NO,self.age,status)
Perfect。能够打印出车辆信息。给大家一个新方法__str__(self)。 这个方法类似__init__(self)方法,在类中有着特殊功能。
它会像__init__(self)方法一样,在类实例化对象时,将此方法绑定到对象中;当我们打印实例化对象时,就会自动打印出__str__(self)方法中的内容我们直接用__str__(self)替换info (self),然后运行下面代码。。
在上述代码中,我们给Bike类绑定了__str__ (self)方法, 实例化对象bike = Bike(1001,2)后直接打印bike信息,就会发现车辆的所有信息已经全部显示出来,接下来,我们要开始“啃硬骨头”了, 完成Manage类。
我们在开始时,已经确定了代码基本结构。首先,我们完成第一个类方法 menu。menu()类方法是系统欢迎界面,我们已经有了欢迎界面的效果。用户输入数字,就会选择相应的功能。
当用户输入数字后,系统执行相对应的功能,应该是:很明显,输入不同的数字,调用不同的方法, 通过条件判断语句来完成。
#系统菜单
def menu(self):
print("欢迎使用共享单车租借系统
")
while True:
print('1.查询所有车辆
2.共享车辆
3.租借车辆
4.归还车辆
5.退出系统
')
select = int(input('请输入所选功能对应得数字:'))
if select == 1:
#单车信息
self.info_bike()
elif select == 2:
#共享单车
self.add_bike()
elif select == 3:
#租借车辆
self.lease_bike()
elif select == 4:
#归还车辆
self.revert_bike()
elif select == 5:
#退出系统
print('期待您下次使用!祝您生活愉快!')
我们完成了menu()方法,接下来我们完成查询所有车辆信息,完善info_bike方法,为了能够测试类方法,我们还需要在Manage类初始化时添加几辆车。
运行一下, 是不是啥都没有?这是为啥? 还是那个问题,类已经定义结束, 但是还没有实例化啊。 接下来,你通过Manage类实例化对象,然后调用类方法menu() 。现在欢迎界面已经出现,也能够进行菜单选择了。下面,我们一一完成这几个功能第一个功能,查询所有车辆。。查询所有车辆,也就是将车辆列表中的信息全部打印出来即可。打印列表?用循环呀。代码就是:
查询所有车辆信息,很简单,接下来,我们顺便完成第二个,共享车辆功能,然后一起测试。第二个功能, 共享车辆。共享车辆,也就是把自己的车辆信息添加到平台中。需要接收车辆编号、车辆使用的年限。
在共享车辆 add_bike(self)方法中,通过Bike类实例化了bike对象。参数写法顺序与Bike类中一致。
好了,接下来完成第三个功能,租借车辆。租借车辆是这个系统的关键,是最复杂的地方。思考一下,如何去租借一辆单车。我们租借单车的时候都会出现什么样的情况:
我们通过state属性来控制车辆状态,0代表待租借,1表示租借中。
我们在租借车辆时,需要对所有车辆循环遍历进行查询。当归还车辆时,也会遇到同样的问题。因此,我们将这个方法抽离出来,即重新定义一个类方法,完成检查车辆编号是否在车辆列表中。
类方法select_bike(self,NO)方法已经完成定义,接下来我们调用下该类方法。直接整合所有代码,如下:
定义类方法select_bike(self,NO): ,调用类方法res = self.select_bike(lease_NO)。
现在,租借车辆功能也完成了。最后,我们完成归还车辆功能。第四个功能:归还车辆。归还车辆与租借车辆功能类似,也是需要调用select_bike(self,NO)方法。
def __str__ (self):
class Manage:
#定义一个列表,用来存储所有的车辆
bike_list = []
def __init__(self):
bikeA = Bike(1001,2)
bikeB = Bike(1002,2)
bikeC = Bike(1003,1)
self.bike_list.append(bikeA)
self.bike_list.append(bikeB)
self.bike_list.append(bikeC)
#系统菜单
break
#单车信息
def info_bike(self):
for bike in self.bike_list:
print(bike)
#共享单车
def add_bike(self):
new_NO = int(input('请输入车辆编码'))
new_age = int(input('请输入车辆使用年限'))
new_bike = Bike(new_NO,new_age)
self.bike_list.append(new_bike)
print('车辆共享成功!')
#租借车辆
def lease_bike(self):
lease_NO = int(input("请输入租借的车辆编号"))
res = self.select_bike(lease_NO)
if res != None:
if res.state ==1:
#车辆租借中
print("你来晚了,车被租走了")
else:
#车辆待租借
print("租借成功,欢迎您使用绿色出行")
res.state =1
print("该车辆不存在")
def select_bike(self,NO):
#遍历整个自行车列表
#如果存在输入编号与车辆列表中的编号一致
if bike.NO == NO:
#返回该车辆信息
return bike
#归还车辆
def revert_bike(self):
#输入归还车辆的编号
revert_NO = int(input("请输入归还的车辆编号"))
#进行查询
res = self.select_bike(revert_NO)
#车辆存在
if res != None:
#租借中,还车成功
if res.state ==1:
#还车成功
print("还车成功,期待下次使用")
res.state = 0
#未租借,等待租借
else:
#车辆等待租借
print("车辆整备完成,等待租借")
#车辆不存在
print("该车辆不存在,想必您是输错了")
user = Manage()
print(user)
user.menu()这节课就到这里了,宝宝们,下节课再见
举报/反馈
上一篇:为地球减负 重庆发《垃圾分类从家庭做起》倡议
下一篇:在线教育行业数据分析:2020年5月中国在线少儿英语教育相关企业注册量为35家
最近更新成人教育
- 职业教育产教融合赋能提升
- 腾讯健康:联手迈瑞医疗助推行业高质量普惠发展
- 儿童友好|“红色传承”——金华市站前小学五年级秋季研学活动
- 考生、家长速看!云南省2024年高考11月5日起报名
- 巢湖市城乡公交线路优化调整 10月20日起实施
- 自贡自流井区:密切家校合作 家校共育连心桥
- 防拐骗、防暴力、防意外……武昌水果湖二小这样教学生自护自救
- 七险二金!云南省属国有企业招人啦
- 烟台市区七个口袋公园年底全部交付
- 24日至25日,北京南部、天津、河北中部局地可达重度霾
- 自考学位证申请的条件是什么?
- 投资160亿元!德欧中心四川
- 贵州税务:加计扣除优惠政策对支持我省企业投入研发、鼓励科技创新起到重要作用
- 高通骁龙 8cx Gen 4 处理器跑分曝光,多核成绩逼近苹果 M2
- 法律职业资格考试主观题考试益阳考区首次开考
- 初级会计证考试都是选择题吗?
- 大国粮仓装满优质粮
- 把课间还给学生,“圈养”并非长久之计
- 江门鹤山:“全链条”保障好“舌尖上的安全”
- 第十届晋江市中小学生“泉州南少林五祖拳健身操”会操比赛圆满落下帷幕
- 北京市开展2023年度公开遴选和公开选调公务员工作
- 防范电信网络诈骗共建平安和谐校园
- 台庆74周年,广东广播电视台开展中医药文化进社区公益活动
- 原创CBA前三轮排名!郭士强压制老东家,新疆上升8位,北控连败露底牌
- 50%职场人群多受腱鞘炎困扰 使用人体工学键鼠有助于预防腱鞘