写作缘起
从2019年3月辞职以来,一直在补以前没有学完的外汇课程,截止到今年3月, 终于学完了。手动交易的时候,还有一些人人都有的困难(比如那句老话let your profit run)难以克服。 19年夏天,无意间下载了一段李笑来在微信群里讲Python的音频,听了之后很受触发,开始接触Python。今年6月开始,学习MQL4和MQL5,发现尤其是MQL5, 和Python的交互很好,并且python用于做策略分析也强大。于是在逻辑教育报了2门课,一个是数据分析,一个是爬虫。目前在学习python基础课,Jerry老师布置了作业,每节课都要写一些。
基础VIP课程一共15节,笔记都在这一篇里面。
后续我还将更新python爬虫笔记,python 数据分析的笔记还有MQL4, MQL5的笔记。
##第一节 计算机要点
有几点关于代码的要求特别有感触
代码要写3遍,第一遍按照老师的视频和要求写;
#####第二遍脱离老师的视频,再去写一遍原码。
#####第三遍按照自己的理解去写。 我从2002年第一次自学VB开始,从来没有这么写过,当然大部分时候都是看书自学,这是第一次跟着视频学习。我觉得经过这3遍,大部分人对代码都会有很深刻的认识了。
第一节课讲得都是比较基础的东西,计算机概念(老师居然没有提到冯诺依曼对计算机的架构的改进),TUI和GUI,DOS代码,纯文本和富文本,常见的字符集,16进制等。
第二节课笔记
环境变量,以前MATLAB编程用的多,从来不知道有这个概念。通过添加按钮来添加环境变量,也可以修改或者删除。
通过pip install可以安装一些模块和库,用CMD安装有时候失败,国内有不少换源安装的服务器,比如豆瓣,阿里,中科大和清华。连接国内的换源安装服务器,既快又方便。
pycharm的安装我以前就会了,这次老师又教了虚拟环境和路径的选择,3月安装的时候,直接设立了全局模式,这次通过虚拟模式,一下多了好几个选择。
第三节课主要讲了表达式,语句,函数的概念,关键字,命名规则,基本数据类型。变量的概念,变量名。
从第三节课开始,终于开始敲代码了,下面是我第一遍敲的,明天再敲2遍
d1={‘python’: ‘Java’}
import copy
d2=copy.deepcopy(d1)
print(d1)
print(‘hello world’)
print(d2)
print(id(d1),id(d2))
print(d1==d2)
print(123,’\n’,456)
第四节课主要讲了格式化字符串,其中占位符,f.format 看着就眼生。
针对字符串的操作,和excel里面的函数用法基本一样,max,min, len,lower,upper等不常用的就是join,去空格。
非布尔值的与或运算,比较运算符,条件运算符,都是很熟的概念了。
这节课我很陌生的代码如下:
import bs4
s='s=%s, s2= %s '%(‘hello’,‘python’)
print(s)
s1=‘钢铁侠’
s2=‘蜘蛛侠’
r=f’hello{s1},{s2}’
print ®
s=‘i like{1},{1}’
a=s.format(‘python’,‘java’)
print(a)
a=‘abc’
r=’-’.join(a)
print®
x=7//3 #取整
y=7%3 #取余
z= 25**0.5 # 开平方
print(x)
print(y)
print(z)
print(ord(‘a’),ord(‘b’))
print(1==True)
f=1 is True # is 比较的是对象的ID,也就是在内存中的位置
print(f)
对于非布尔值,非运算会将其先转换为布尔值,然后再取反
#对于0, None,这些表示空性的值,都会转换成false
h=None
h=not h
print('h= ',h)
m= true and true
m= 1 and 2
print('m= ',m)
r=0 or 3
print ®
第五节课
python对于缩进的要求比mql4等语言要求高的多,我发现我经常在这里犯错误。 这次讲了任何语言的基础,包括if ,else,while, for, break和continue的用法。break 和continue还是比较简单,而循环衍生出的命题可谓无穷无尽了。
b = 2 or 3 and 4
print(b)
if False: print(‘hello’)
if True: print(‘hello2’)
num=50
if num>20: print(‘hello1’)
content=input( )
content=int(content)
if content>20000:
print('ok')
else:
print(‘mnifjaio’)
r=0
i=0
while i<100:
i=i+1
if i%2==0:
r=r+i
print(i)
print®
i=0
while i<5:
print('********')
i = i + 1
i=0
while i<5: #控制高度
j=0
while j<15: #控制宽度
print('*', end='')
# print('*', end='')
# print('*', end='')
# print('*', end='')
# print('*', end='')
j=j+1
print()
i=i+1
i=0
while i<5:
j=0
while j<5-i:
print(’*’, end=’’)
j=j+1
print()
i=i+1
i = 0
while i < 5:
j = 0
while j <i+1:
print('*', end='')
j = j + 1
print()
i = i + 1
i=0
while i<9:
i=i+1
j= 0
while j<i:
j = j + 1
print(f’{j}{i}={ji}’ , end=’’)
print()
i=0
while i<6:
i=i+1
if i==3:
continue
print(i)
else:
print(‘hello’)
i = 0
while i < 6:
i = i + 1
if i == 3:
break
print(i)
else:
print(‘hello’)
第六节 主要讲了怎么对列表进行操作,乘法,加法, in, not in, len max min, s.index s.count s.append,s.insert,s.pop, s.remove, s.clear,s.reverse,s.sort
代码太简单了,这里就不写了,我打了大约80行代码,其中一半都是print
周三老师有事没来上课,周五上的是第七节课,这节课讲的也比较简单,元组的性质:不可变序列,元组不能为空,至少为,.元组的解包。然后讲字典,键值对,各种函数,dict,get,update,del,pop,copy. 遍历字典的方法,d.key, d.value, ditem. 最后讲了集合,集合只能存储不可变对象,集合存储的对象是无序的,集合不能出现重复元素。set函数可以创建集合。
这次课的代码我敲了有104行,和上次差不多,基本一半都是print,看看结果。
第8节课 讲了集合和函数
集合用的比较少,讲的也很快,基本都是前面的函数+高一上学期的数学。函数有len, add,update,pop,remove,clear. 集合的运算,交集,并集,异或集
可变对象的三要素: id,type. value
函数一共分3节课,这次是第一节,函数也是对象,函数的参数有实参和形参,函数的传递方式,不定长参数有2个,一个解决位置,一个解决其他关键字。
下面是本节课的代码:
s={1,2,3,4,‘a’,‘b’}
print(s)
s.add(5)
print(s)
s3={10,20,30,40,‘as’,‘bp’}
# s.update(s3)
# print(s)
# r=s.pop()
# print®
# s.remove(2)
# print(s)
s2={3,4,5,6,7}
r=s&s2
print®
r1=s|s2
print(r1)
r2=s-s2
print(r2)
r3=s2-s
print(r3)
r4=s^s2
print(r4)
a=[1,2,3]
print(a,id(a))
a[0]=10
print(a,id(a))
a=[4,5,6]
print(a,id(a))
b=a
b[0]=100
print(b,id(b))
#函数也是一个对象,
函数用来保存一些可执行的代码没在你需要的时候可以对这些语句进行多次调用。
def s():
print(1+1)
s()
def fn(a,b,c=20):
print(a)
print(b)
print©
fn(1,2,3)
fn(1,2)
#关键字传参,可以不按照定义的顺序去传递,根据参数名去传递参数
#必须将位置参数写在关键字参数的前面
#在函数中对形参进行赋值,不会影响其他的变量
#当我们通过形参去修改对象时,会影响到所指该对象的变量
def fn3(a):
a=20
print(a)
c=10
fn3©
print©
def fn4(a):
a[0]=20
print(a,id(a))
c=[1,2,3]
#fn4(c.copy()) #传递副本
fn4(c[:])
print(c,id©)
def fn(*a):
print(a,type(a))
r=0
for n in a :
r=r+n
print®
fn(1,2,3,3,5,)
#** 形参可以接收其他关键字参数,他会将这些参数统一保存到一个字典
当中,**形参也只能有一个,并且必须卸载所有参数的后面
def fn23(**a):
print(a,type(a))
*argument 解决位置参数
fn23(b=1,d=2,c=3)
def fn(a,b,c):
print(a)
print(b)
print©
t=(4,5,6,7,8,9)
d={‘a’:1,‘b’:2,‘c’:3}
fn(*d)
fn(**d)
第九课,函数课程第二节,挺难的,这节课讲到了递归。除此以外,讲了函数的返回值,return,help函数,global函数,locals函数返回一个字典。递归的2个条件,基线条件和递归条件,课程代码