学员信息
- 学号:1901060005
- 学习内容:MIT 30天打卡
- 学习用时:14.5小时(1-6) + 46.5小时(7-30)
学习笔记
第一天
学习内容:看唐总总推荐链接的视频,感谢自学营没有忘记我们。看第一节课视频40 分钟。 学习心得:
1.刚打开视频,有种崩溃的感觉,完全不知所云,看到十分钟左右还是蒙蒙的状态, 视频起到了很好的催眠效果,看视频的过程中几乎要睡着了。还好为克服惰性选择在 星巴克,喝了一口咖啡提提神,慢慢的看到简单的程序语言有点点熟悉的感觉了,能 够跟着视频听懂一些内容,原来的睡意也没有了,不错的感觉。
2.通过视频学习,对于老师讲到的计算机运算能力很快,但是它什么都不知道,如果 没有给他指令,它什么也做不了,如果我们想让计算机输出“X”就需自己先知道怎样 才能够得到它,并转化机器语言输入计算机。感觉这样的表述特别清楚,学习机器语
言就是学习规范自己的逻辑思维的过程。 3.学习语言的关键动作就是 练习。 4.任何学习都是有一个过程:
知行合一
第二天 视频学习内容:
1.字符串的基本概念和简单操作
2.学习了Python的分支、迭代、循环的表达方式。 学习心得:
1.又加深了对字符串的概念和基本操作的理解。
2.if…elif…的表达方式更精简了语言的条件、分支的表述。 3.加深了对for和 while两个循环的理解,
for循环和while循环,两者的相同点在于都能循环做一件重复的事情;不同点在于, for循环是在序列穷尽时停止,while循环是在条件不成立时停止。
第三天
学习内容:
1.学习视频两遍用时1.5小时
2.学习了字符串的操作,字符串只能被切分,不可更改。
3.新学习到字符串可以简单被反向遍历,以前竟然没有想象过这个问题。
4.学习了三种算法:guess-and-check,approximate solutions,bisection method
学习心得:
自学营结束后,自己又是不是的学习笑来老师的《自学是门手艺》,也有上机练习编程,虽然没有熟练,不过可以编写简单的程序,通过MIT自学营的唤醒,对于Python语言的熟悉度又加强了。主要是在自学的过程中提升了自己的自信心,以前从来没想象自己可以编程,那是遥不可及的事。通过学习感觉到了只要自己要做,并且持续的坚持、践行,就一定会有收获。相信只要学习就一定会产生时间的复利。在学习营里有任务的学习,有同学和老师们的互相砥砺,惰性减少,效率提升,有组织的感觉真好。
第四天
1.复习笑来老师《自学是门手艺》Part.1.E.2.values-and-their-operators部分。
2.学习网上前辈们的技术博客,主要也是学习数值的类型和转换函数。
学习心得:
1.基本的三种数据类型:
- 布尔值(Boolean Value)
- 数字(Numbers):整数(Int)、浮点数(Float)、复数(Complex Numbers)
- 字符串(Strings
重点是有读到了笑来老师书里的一句话:
运算的一个默认法则就是,通常情况下应该是相同类型的值才能相互运算。
这句话自所以是重点,关键它是一个默认法则,也就是通常情况的运算都是遵循这样的法则运行。那么有没有例外呢?自己也在网上搜索了相关信息好像没有不同类型的数值进行运算。不同类型值之间要进行运算就需要进行数值转换,那么转换的函数都有哪些呢?
2.数值转换的函数:
1 | int(x [,base ]) 将x转换为一个整数 |
3.了解并加深了理解不同数值的操作符。
第五天
1.学习第四天视频内容。
2.学习定义函数和函数内容编写。
学习心得:
1.视频中的编程内容基本都能够理解,不过自己在读写甚至是编写的时候就感受到了在练中学,对概念的理解是相对容易。
2.比如Python中的函数,自己最初的理解就是一个能够实现某一功能的小段程序。
函数能提高应用的模块性,和代码的重复利用率。
3.函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义一个局部变量。如果要在函数中给全局变量赋值,需要用global关键字声明
第六天
1.笑来老师《自学是门手艺》递归函数部分。
2.视频作业练习。
3.学习了变量的局部范围和全局范围
学习心得:
1.学习了递归函数三原则并反复测试递归函数:
1).根据定义,递归函数必须在内部调用自己;
2).必须设定一个退出条件;
3).递归过程中必须能够逐步达到退出条件……
2.用循环方法和递归函数两种方法计算数值的求和。
递归函数法
1
2
3
4
5
6def sum1(num):
if num ==1:
return 1
else:
return num+sum1(num-1)
print(sum1(5))循环法
1
2
3
4
5
6def sum1(num):
a=0
for i in range(1,num+1):
a+=i
return a
print(sum1(5))
条条大道通罗马,现在的感觉哪条大道修起来都不容易。程序思维是学习的重点,虽然进展缓慢,还是要着实用功。
第七天
1.教学视频及作业练习
2.学习元组•列表
3.一系列列表的操作函数
学习心得:
- append,extend,remove,del,pop 等函数都会改变列表。
1 | L1=["bacon","eggs"] |
结果
1 | > ['bacon', 'eggs', 'juice', 'toast', 'jam'] |
- join将 容器对象 拆分并以指定的字符将列表内的元素(element)连接起来,返回字符串(注:容器对象内的元素须为字符类型)。
split以指定的字符将字符串分割为单个元素(字符类型)并加入list中,返回一个List。
- sorted(L) 返回一个排序后的L,不改变原始的L;
L.sort() 是对原始的L进行操作,调用后原始的L会改变,没有返回值。
L.reverse() 倒序排列并改变列表。
- remove()不能用于循环删除。
x = [‘a’, ‘b’, ‘c’, ‘d’]
y = [‘b’, ‘c’]
for i in x:
if i in y:
x.remove(i)
print x
result:
[‘a’, ‘c’, ‘d’]
第八天
1.第五天学习资料中“lec5_tuples_lists.py”文件,运行里面的代码。
学习心得:
- 元组与元组可以进行相加操作,元组也可以迭代。
t=’python’
b=(6,7,8)
c=b+(t[1],)
print(c)
(6, 7, 8, ‘y’)
- 没有搞懂为什么这个函数变量无法调取外部数值
1 | def sum_elem_method1(L): |
错误提示:
unindent does not match any outer indentation level (
, line 3)
问题解决:total缩进有问题
第九天
1.函数的返回值及函数调用间的关联
2.字符串的格式化方法
学习心得:
- 函数无论是否有返回值,都是可以被调用的,没有返回值用print打印函数返回结果是None,有返回值的时候就可以用print显示函数的返回结果。
例如:
1 | def say_hi(*names, greeting='Hello', capitalized=False): |
终端运行结果:
1 | > Hello, tome! |
- 字符串格式化方法主要有三种:%格式化 , str.format()和f-Strings。
%格式化操作容易表现出各种问题,导致许多常见错误(例如无法正确显示元组和字典)。
python中用%代表格式符,表示格式化操作,常用的操作有%s,%d,%r等.
%r用rper()方法处理对象
%s用str()方法处理对象
%d十进制整数表示使用较新的格式化字符串文字或 str.format() 可以有助于避免这些错误。这些替代方案还提供了更强大,灵活和可扩展的格式化文本方法。它使用普通函数调用语法,并且可以通过 format() 方法为对象进行扩展。使用 str.format() 时,替换字段用大括号进行标记。
str.fotmat()在处理多个参数和更长的字符串时仍然可能非常冗长。
f-Strings,它可以使得字符串格式化更加容易。
f-strings 是指以 f 或 F 开头的字符串,其中以 {} 包含的表达式会进行值替换。
1 | name = "hoxis" |
对应结果:
hello, hoxis. you are 18 ?
hello, hoxis. you are 18?
[‘hi hoxis.you a 18.you are learning Python.’]
第十天
1.学习了列表操作中append(),extend(),insert()不同函数之间的区别,以及pop()和remove()的区别。
学习心得:
- 看到群里同学们在讨论append(),extend()的异同,这是自己没有留意到点,顺便做了一点延申学习。
append(object) 是将一个对象作为一个整体添加到列表中,添加后的列表比原列表多一个元素(会改变原列表),该函数的参数可以是任何类型的对象,该函数没有返回值
extend(iterable) 是将一个可迭代对象中的每个元素逐个地添加到列表中,可迭代对象中有几个元素,添加后的列表就比原列表多几个元素,该函数的参数必须是可迭代的对象,改函数没有返回值
insert(object) 方法是指在某个特定位置前面增加一个数据项。
1 | a_list=[1,2,3] |
[1, 2, 3, [4, 5, 6]]
第十一天
- 看了一遍多的视频。
- 学习递归函数、编写并运行。
学习心得:
1
2
3
4
5
6
7
8
9
10
11def printMove(fr, to):
print('move from ' + str(fr) + ' to ' + str(to))
def Towers(n, fr, to, spare):
if n == 1:
printMove(fr, to)
else:
Towers(n-1, fr, spare, to)
Towers(1, fr, to, spare)
Towers(n-1, spare, to, fr)
Towers(3,1,2,3)
1 | move from 1 to 2 |
感觉递归函数特别牛,如此聪明的代码,能看懂但是想不出,满受刺激。
- 兔子繁殖的算法让自己头晕,感觉会编程的都是数学家。化繁为简需要的智慧。
第十二天
- 学习群里优秀的打卡作业
- 学习lec6_recursion_dictionaries.py一个程序
学习心得:
套用两个自定义函数的自定义函数感觉逻辑上都难理解。还是先从实用、简单的小程序入手,循序渐进。
第十三天
1 | i=int(input("Which multiplication table would you like:")) |
运行结果 :
1 | Which multiplication table would you like:5 |
- for循环(计数循环)
- range()函数–计数循环的一个捷径。
- while循环(条件循环)
- 用continue跳到下一次迭代
- 用break跳出循环
第十四天
第十五天
- str.format
1 | for i in range(9,0,-1): |
1 | 9x9=81 9x8=72 9x7=63 9x6=54 9x5=45 9x4=36 9x3=27 9x2=18 9x1=9 |
- %操作符
1 | for i in range(1,10): |
1 | 1x1= 1 |
- f-strtings
1 | for i in range(1,10): |
第十六天
- 笑来老师的《自学是门手艺》“保存到文件的函数”部分
学习心得:
- 事情忙起来都没时间学习,当然也和惰性有关,没有及时投入学习。当有突发情况出现只有见缝插针的进行学习并完成日记。
- 学习了函数保存文件里作为模块方便调用,并温习了函数调用的方法。
第十七天
- 笑来老师的《自学是门手艺》“值及其相应的运算”部分
- 学习lec7_debug_except.py中的程序
学习心得:
- lec7_debug_except.py中的程序对自己来说还是要再花时间消化.
- 定义素数列表函数这里就花费了很多时间,刚开始都没有理解程序的逻辑。
- 学习别人的程序前首先要看看注释,能比较快速的理解函数要实现的功能。
第十九天
- 学习了解“对象”的概念:对象=属性+方法
- 可以对它们做什么(动作)。
- 如何描述(属性或特性)。
学习心得:
- 先定义对象,像什么,会做什么。就如先画一张图纸确定要建造的实体是什么,能干什么。
第20天
第21天
- class后面紧接着是类名,类名通常是大写开头的单词(例如:Teacher),紧接着是(object),表示该类是从哪个类继承下来的.
- 注意到init方法的第一个参数永远是self,表示创建的实例本身,因此,在init方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。
第22天
- 对象=属性+方法
- 属性相当于变量,只不过是在对象中的变量。它可以显示,可以赋值,可以给常规变量(不是对象的变量)赋值,可以给其他对象的属性赋值。
- 对象就是将一个产品从无到有的一个过程,定义类就相当于给一个即将建造的产品命名,然后通过属性和方法告诉大家这个产品是什么,什么形状、颜色、大小、重量等等属性,它可以做什么,可以怎样操作等等。
比如建房子,属性和方法就是相当于为要建的房子画了一个图纸,只要按图施工就可以建造出图纸上的房子。实例就是开始按照图纸建造房子,一个图纸可以建造很多房子。
1 | class Door(): |
打开这个宽90cm颜色red的木门门
关闭这个宽120cm颜色white的铝合金门
第23天
- 构建一个对象首先要定义,可以初始化属性,可操作的方法,创建实例。虽然大概流程了解了,要使用好对象还是要在代码上多下功夫,既要不断地熟练基本操作,又要不断的理顺自己的逻辑思维能力。在顺利程序的过程中也是不断的顺利自己思维里的逻辑,是一个一举两得学习。
- 对象中的数据(属性)可以被查看和修改,不过建立一个方法可以同时调整两个及以上的属性,还有就是可以避免很多无效的操作。
第24天
- 多态就是在一个对象中可以有两个或者多个相同的方法,它们可以有不同的行为。
- 同时再强化下方法,对象的方法就是可以调用这些代码做什么事。方法就是对象中的函数。
- 概念的理解是学习效率的关键,对于重要概念要反复的学习、复习、敲代码践行。
第25天
- 继承就像孩子从长辈继承了一些东西,比如样貌、皮肤、发质等等,也可以是钱财。
- 对象的编程中,类可以从其他类继承属性和方法,就形成一个“家族”以共享相同的属性和方法。
1 | class Person(object): |
第26天
1 | class BankAccount: |
第27天
- 对象现实应用
学习心得:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27class BankAccount:
def __init__(self ,account,name,balance):
self.account=account
self.name=name
self.balance=balance
def save_money(self, money):
self.balance += money
def draw_money(self,money):
if self.balance>=money:
self.balance-=money
print("取款金额:{} 余额:{}".format(money,self.balance))
else :
print("余额不足")
def check_balance(self):
print("账号:{} 户名:{} 余额:{}".format(self.account,self.name,self.balance))
bankat=BankAccount(123456,"lili",3200)
bankat1=BankAccount(123489,"王文",1000)
bankat.save_money(2800)
bankat.draw_money(1200)
bankat1.save_money(890)
bankat1.draw_money(1000)
bankat.check_balance()
bankat1.check_balance()
取款金额:1200 余额:4800
取款金额:1000 余额:890
账号:123456 户名:lili 余额:4800
账号:123489 户名:王文 余额:890
第28天
- 在学习的路上不会孤单,有问题先在网络上查找解决问题的办法,有无数的先行者已经把踩过的坑都做了解决攻略。学习中最需要的是克服自己的浮躁,有问题的时候就是提升自己的时候,无论知识还是情绪。
- 学习python基础的概念、知识点之后,可以借助第三方库解决很多实际问题,这样语言就越来越贴近工作和生活了。
1 | import pygame,sys |
第29天
看了Lecture10部分视频,云里雾里,通过网络资料了解、学习程序复杂度分析。
算法通过时间复杂度和空间复杂度来评价一个程序的好坏,衡量算法的运行时间有三种方法:基准评价、统计指令,以及复杂度分析(大O表示法)。
空间复杂度和时间复杂度,可以作为选择数据类型的评判标准之一。
对于一个程序来说,编程语言提供了最基础的类型实现,例如python里面的str,int,float,list,tuple等,在表达一个数据结构的时候,就有各种选择,可以选择不同的方式,而当你选定了数据结构,那么你程序最基本的运行时间就大概已经定型。
不同数据结构复杂度连接分享。
第30天
- 在脚本上随便修改矩形颜色,底板颜色,随机生成100个矩形图案相互叠加还是蛮好玩。
- 时间和坚持会越来越了解、理解一门语言,同时这门语言是未来的趋势,是技能、是手艺、是逻辑训练工具、是与年轻人交流的工具甚至可以成为发展兴趣的工具(瞬间感觉这门语言很强大^ _ ^)。
- 坚持打卡30天,过程中不断的挑战、突破,时间及惰性,虽然还有太多不足,而这也是前行的动力。
1 | import pygame,random |