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

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.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容