美文网首页用着Python学量化刺猬教你量化投资财经·投资·理财
刺猬教你量化投资(二) :运算、控制与结构

刺猬教你量化投资(二) :运算、控制与结构

作者: 刺猬偷腥 | 来源:发表于2017-09-23 14:39 被阅读242次

    Python的三类运算

    Python的基本运算包括三种类型,分别是算数运算、比较运算、赋值运算和逻辑运算。

    1. 算数运算

    算数运算包括加、减、乘、除、取余、取整除、求幂等,分别用+、-、* 、/、%、//、**表示。比如说:

    In [1]:
    a=1
    b=2
    c=[a+b,a-b,a*b,a/b,a%b,a//b,a**b]
    print c
    
    [3, -1, 2, 0, 1, 0, 1]
    

    值得注意的第一个地方是,a/b运算的结果竟然是0而不是0.5,这是因为在Python2.x中,两个整数的除法运算结果亦为整数,而且不进行四舍五入。如果想得到正确答案0.5,我们需要将a或b其中一个整数变为浮点数:

    In [2]:
    a=1
    b=2
    c=float(a)/b
    print c
    
    0.5
    

    除此之外,还有一个方法解决除法运算的问题,那就是从Python3中引入除法的模块。方法如下:

    In [3]:a=1
    b=2
    from __future__ import division
    c=a/b
    print c
    
    0.5
    

    值得注意的第二个地方是,取余时,当正好被整除而没有余数时,Python返回的结果是0。

    1. 比较运算

    比较运算包括等于、不等于、大于、小于、大于等于、小于等于,分别用==、!=、>、<、>=和<=表示。

    比较运算的结果属于布尔类型,即返回的结果为真或为假。例如:

    In [4]:a=1
    b=2
    c=a>b
    d=a<b
    print c,d
    
    False True
    
    1. 赋值运算

    简单的赋值运算使用=即可,但对于a=a+1这种赋值方式,还有更简便的写法,那就是使用加法赋值运算符+=,格式如下:

    In [15]:a=1
    a=a+1
    print a
    b=1
    b+=1
    print b
    
    2
    2
    

    同理,除了加法赋值运算符,还有除法、乘法、除法、取余等赋值运算符,格式均一样。比如-=、=、/=、%=、*=、//=。

    1. 逻辑运算

    逻辑运算包括“与”、“或”、“非”,分别用and、or、not表示。

    • and运算符:表达式为a and b,a和b都为True,返回结果True,但a或b中只要有一个逻辑为False,则and的结果即为False。

    • not运算符:表达式为not a,“非a”的意思是,如果真的不是a,那就返回True,如果真的是a,那么结果就是False。

    • or运算符:表达式为a or b,只要a或b有一个是True,那么结果就会返回True。

    • 在Python中,0、空字符串、none三者均为False,其余对象均为True。

    • 再进一步,True相当于1,False相当于0。

    Python的运算优先级

    优先级的含义是,Python在处理程序命令的时候,会按照优先级的顺序进行。比如小学数学的口诀“先乘除后加减”,就说明了做运算时应遵循的规则。下表整理了常用命令的优先级顺序:

    优先级 运算 示例说明
    1 函数、寻址、下标 append()、id()、a[1]
    2 求幂 **
    3 翻转运算 ~x=-(x+1), ~2+1=-2
    4 正负号 3*-2=-6
    5 乘、除、取余 *、/、%
    6 加、减 +、-
    7 比较运算 <、>、==
    8 逻辑运算 and、or、not

    运算与表达式

    表达式可分为四种类型,分别是:

    表达式类型 示例说明
    值表达式 1
    计算表达式 1+2
    字符串表达式 "hello!"
    变量表达式 a=1+2

    在其他编程语言中,自定义函数一般用“def 函数名”的形式展开。在Python中,若需定义只含表达式的函数,可采取“函数名=lambda a,b:公式”的方法实现。比如说:

    In [5]:sum=lambda a,b:a+b
    sum(1,2)
    Out[5]:3
    

    控制流概念

    我们在过马路的时候,需要根据交通灯的指示红灯停绿灯行。同理,电脑运行程序的时候,也会根据我们设置好的交通灯指令按顺序执行。通过使用控制流语句,便可将程序划分为三种控制流结构,分别是顺序结构、分支结构以及循环结构。

    • 顺序结构是指程序自上而下逐行运行。

    • 分支结构加入了条件的判断,根据判断的结果,程序执行不一样的指令。
      一般使用if语句来实现,表达式为:

    if 判断语句:
         执行代码
    elif 判断语句:  
        执行代码
    else: #其他情况
        执行代码
    endif
    #判断语句后记得加:
    #条件最好能互斥且穷举
    #程序运行的时候会按顺序判断,一旦满足就执行,然后后面就不看了
    
    • 循环结构中,程序会不断重复地执行指令,直到遇上终止的条件。常见的语句是while和for。对于while语句,只要判断的条件为真,程序将不断重复执行,直到判断条件变为假(0,"", none),循环终止。而对于for语句,可令程序对范围内的条件逐一执行,格式为for i in [1,2,3,4,5,6,7,8] <br/> if 判断语句
      。比如说:
    In [1]:a=0
    for i in range(0,11): 
        a=a+i
    print a
    
    55
    #range(start, stop, step),默认start为0,step为1,stop没有默认值,必须自己填写
    #range(0,11)同样包前不包后,等同于[0,1,2,3,4,5,6,7,8,9,10]
    

    对于循环结构的语句,有时会进入死循环,这时就需要用到break语句来打断死循环。

    此外,对于需要终止某一次循环的时候,还可以用continue语句,比如说:

    In [2]:a=0
    for i in range(0,6): 
        a=a+1
        if a==3:    
            continue  #当a等于3时,就被忽略了一次,然后回到开头继续循环
        print a
    
    1  
    2
    4  #结果中不包含3,直接从4开始继续
    5
    6
    

    至此,我们已有能力自己编写一个猜数字的小游戏。

    In [3]:import random
    number=random.randint(1,51)
    guess=0
    while True:
        num_input=raw_input("please input an integer between 1 to 50:")
        guess+=1
        
        if number==int(num_input):
            print "you are awesome, the correct number is %d and you just need %d time guesses then succeed" %(number,guess)
            break
        elif number<int(num_input):
            print "try smaller"
        elif  number>int(num_input):
            print "try bigger"
        else: 
            print "please input a correct integer."
    
    please input an integer between 1 to 50:40
    try bigger
    please input an integer between 1 to 50:50
    you are awesome, the correct number is 50 and you just need 2 time guesses then succeed
    

    结语

    在认识各种数据类型、掌握基本运算的原理、了解Python的控制与逻辑结构后,我们接下来将弄清楚如何使用Python中的各种函数,敬请期待。


    刺猬偷腥
    2017年9月23日


    to be continued.

    相关文章

      网友评论

      • 言未醒:编程跟投资有毛线关系,这也让发表?为啥我的都不让,审核的人真棒槌,没法说。处于小学没读完吧。早知道我写小学算数题了,估计会被膜拜的。
        刺猬偷腥:量化投资通常以Python语言为基础的,所以是入门的内容。
      • 78d7d379f1d3:膜拜大神!未来的股神就是你了!
        刺猬偷腥:@左卫门_b1c9 :beers:

      本文标题:刺猬教你量化投资(二) :运算、控制与结构

      本文链接:https://www.haomeiwen.com/subject/kxqqextx.html