2019-8-28
学习日志(第十关)
- 今天学习并且通关第十关,从内容到测试都做的比较顺利,学到了index的取值方式,应用很开脑洞,我只能用居然没想到来形容,用取值位移的方式调出数据判断胜负,这真是太让我惊叹了,电脑思维果然是开眼界啊.
- 知识盲点:
- 第一个是def设置变量时候忘了食堂的菜单可以定义多参数,我自定义是一个一个输入输出;
- 第二个是子函数和主函数之间的转换衔接还不是很顺利
- 复习下第9关的教学,温故而知新,这点非常重要,而且有助于建立起学习的信心,因为通关更容易了.
-
- 熬夜都要通过第11关哦,I LOVE DEBUG.
2019-8-29
学习日志(第11关)
- 今天学习了debug四种常见错误,
- 粗心(检查作业),知识应用不熟练(温故而知新),思路不清(逻辑关系没搞清),被动掉坑(软件测试方法).
- 新扩展了两个点,一是随机取字符串的自定义函数,封装到内置函数有点困难,暂时没去研究;
字典取值的一行代码需要去学习.Python 字典 items() 方法
- 关于字典取值的一行代码调用,请教了七七;try.except语句测试error,软件测试是不是也用这个?对于字典和列表取值有时候还会有点混淆,还得多翻阅.
- 帮助同学抓虫,帮助别人也加深自己的理解,debug比code更费精力哦.一是print函数内嵌套的括号检查(粗心);二是程序执行函数调用取值顺序问题,涉及到PY运行原理机制,深入后才更懂你哦;三是帮忙同学找软件包
-
- 明天就计划通过12关卡啦.
2019-8-30
一种全新的编程思维:面向对象编程(Object Oriented Programming)
类:类之所以为类是因为每一个类之下都包含无数相似的不同个例.
实例:类的个例就叫做实例 (instance),可理解为“实际的例子”。
对象:Python中的对象等于类和实例的集合:即类可以看作是对象,实例也可以看作是对象,比如列表list是个类对象,[1,2]是个实例对象,它们都是对象。
Python里的每个类都有自己独特的属性(attribute)和方法(method),是这个类的所有实例都共享的。换言之,每个实例都可以调用类中所有的属性和方法。
特殊参数:self要点:
self会接收实例化过程中传入的数据,当实例对象创建后,实例便会代替 self,在代码中运行。
- 第一点:只要在类中用def创建方法时,就必须把第一个参数位置留给 self,并在调用方法时忽略它(不用给self传参)。
- 第二点:当在类的方法内部想调用类属性或其他方法时,就要采用self.属性名或self.方法名的格式。
特殊方法:初始化方法
- 定义初始化方法的格式是def init(self),是由init加左右两边的【双】下划线组成( initialize “初始化”的缩写)。
- 初始化方法的作用在于:当每个实例对象创建时,该方法内的代码无须调用就会自动运行。
学习日志(第12关)
- 今天学习了全新的编程思维,*面向对象编程.对象={类,实例}.*需要注意self参数的特性,可以传递和初始化输出
- 思维的改变不是一朝一夕的,
习惯于’先做什么,后做什么’的思维,现在要变为**‘这是什么,能做什么’** - 改变思维需要练习的加强,有时间可以把前面关卡的测试改变为对象编程.万事万物,皆为对象.
-
- 明天通13关和14关,先抢个G3列车位,再复习G2关卡的知识点.
2019-8-31
类的基础知识(1.面向对象编程,2.类的创建和调用,3.创建类的两个关键点)。
拓展类的知识疆界,探索两个类的拓展玩法:类的定制和类的继承。
类能成为面向对象编程的主要工具,帮助 Python 在编程世界打下一片疆土,很大程度上是基于它的继承和定制。
函数isinstance(),可以用来判断某个实例是否属于某个类。
知识点:多层继承(垂直继承)和多重继承(水平继承+就近垂直继承)
学习日志(第13和14关):
- 把类与对象下部分章节学了,探索两个类的拓展玩法:类的定制和类的继承。
- 继承:多层继承(垂直继承)和多重继承(水平继承+就近垂直继承)
- 定制:新增代码 和 重写代码
子类继承父类方法的操作是在def语句后接父类.方法(参数).在继承的基础上,通过参数的调整完成了定制。而参数的调整,可以增加参数(如 rate),也可以改变参数的默认值。
str(self)
只要在类中定义了__str__(self)方法,那么当使用print打印实例对象的时候,就会直接打印出在这个方法中return的数据。
2.
- 容易混淆点:子类继承新增属性在def语句里面操作,参数调整要在下一行代码里面完成
- self参数全能替身,代码多了就容易混淆,练习巩固
- 多看看13关和14关进阶练习代码写法,引用如下:
- 明天回顾G2知识点,塑造类的编程思维.
class Student:
def __init__(self, name, job=None, time=0.00, time_effective=0.00):
self.name = name
self.job = job
self.time = time
self.time_effective = time_effective
def count_time(self, hour, rate):
self.time += hour
self.time_effective += hour * rate
class Programmer(Student):
def __init__(self, name):#其他有默认赋值,所以可以不写
Student.__init__(self, name, job='programmer', time=0.00, time_effective=0.00)#调整参数
def count_time(self, hour, rate=1):#默认为1
Student.count_time(self, hour, rate)#在这里可以改rate
student1 = Student('韩梅梅')
student2 = Programmer('李雷')
print(student1.job)
print(student2.job)
student1.count_time(10, 0.8)
student2.count_time(10)
print(student1.time_effective)
print(student2.time_effective)
def __init__(self, name, author, comment, state = 0):
self.name = name
self.author = author
self.comment = comment
self.state = state
# 创建一个Book类的子类 FictonBook
class FictonBook(Book):
def __init__(self, name, author, comment, type = '虚构类'):#如果父类有赋值的参数如state可以不写,新增属性要这里添加
Book.__init__(self, name, author, comment, state = 1,)#这里可以改变参数的取值
self.type = type
def __str__(self):
status = '未借出'
if self.state == 1:
status = '已借出'
return '类型:%s 名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.type, self.name, self.author, self.comment, status)
book = FictonBook('囚鸟','冯内古特','我们都是受困于时代的囚鸟')
print(book)
class Book:
def __init__(self, name, author, comment, state = 0):
self.name = name
self.author = author
self.comment = comment
self.state = state
def __str__(self):
status = '未借出'
if self.state == 1:
status = '已借出'
return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.comment, status)
class BookManager:
authors = []
def __init__(self):
book1 = Book('撒哈拉的故事','三毛','我每想你一次,天上便落下一粒沙,从此便有了撒哈拉。')
book2 = Book('梦里花落知多少','三毛','人人都曾拥有荷西,虽然他终会离去。')
book3 = Book('月亮与六便士','毛姆','满地都是六便士,他却抬头看见了月亮。')
self.books = [book1,book2,book3]
self.authors.append(book1.author)
self.authors.append(book2.author)
self.authors.append(book3.author)
def menu(self):
while True:
print('1.查询书籍')
choice = int(input('请输入数字选择对应的功能:'))
if choice == 1:
self.show_author_book()
else:
print('感谢使用!')
break
def show_author_book(self):
author = input('请输入想查询作家的名称:')
if author in self.authors:
print(author + '的作品有:')
for book in self.books:
if book.author == author:
print(book)
else:
print('很可惜,我们暂时没有收录这位作者的作品')
manager = BookManager()
manager.menu()