Android程序猿带你学python第2章--逻辑控制

来源:互联网 时间:2017-06-01

导读



无论多复杂的业务,最后承载他们的逻辑都可以简单的归为以下几类:
算数运算符,比较运算符,逻辑运算符,条件控制,循环迭代。只要理清楚这几类逻辑是如何表达的,那这门语言就可以清晰的呈现出来了

算数运算符



+,-,*,/,%
这个和java里保持一致,没有什么可以讲的 加减乘除取余

比较运算符



==,!=, >,<,>=,<=
所谓的比较运算符,就是相互比较的关系,是否相等,大于还是小于。这个和java也完全保持一致

逻辑运算符



and或者&, or或者|, not
在Java就是&& ,||, ! 与或非的关系

举个例子>> 4>3 & 3>2TRUE>> 4>3 or 3<2FALSE


赋值



用=号来赋值
和java有些区别的是,python里的赋值显得十分随意,可以对变量进行任意类型赋值

举个例子>>a = 3>>a3>>b = "hello", "world">>b("hello", "world") 这个就是我们之前已经了解过的元组>>c, d = 1, "ha">>c1>>d"ha">>c,d(1,"ha") 元组again

对于我们的Java程序猿来说,是不是很神奇

还可以直接值对调,不需要中间变量

>>a,b = b,a


逻辑控制



无非条件判断,循环两种常见的控制

条件判断

if关键字
语法:

if case1: state1elif case2: state2elif case3: state3else: state4

注意elif这里不是else if了,而是elif,和java中有一点小区别

举个小例子新建一个py文件#!/usr/lib/env python 这个是用于解释说明python的环境#coding:utf-8n = input("input")if int(n)>5: print("n>5")elif int(n) <2: print("n<2")else: print("5>=n>=2")


三元表达式

语法:
A=Y if X else Z
如果X真 A=Y
如果X假 A=Z

例如在终端试试这个>>x=2>>y=3>>z=1 if x>y else 4>>c4

和java中的 A = B ? C :D是不是很像?

java表达:int a = 3;int b =4;String s = a > b ? "a>b" : "a<b" ;


循环控制

和java保持一致,也是分for循环和while循环

for

语法:

for 条件: state1else: state2

这里和java最大的区别是for可以添上一个else用于执行一些跳出循环外的逻辑

举个例子#!/usr/lib/env python#coding:utf-8"""输出100以内被3整除的数"""for i in range(0, 100, 3): print(i)


这里就提到了range(start, stop[,step])这个内建函数
先看下定义
range函数是一个用来创建算数级数序列的通用函数,返回一个[start, start + step, start + 2 * step, …]结构的整
数序列;range函数具有一些特性:
1.如果step参数缺省,默认1;如果start参数缺省,默认0。
2.如果step是正整数,则最后一个元素(start + i * step)小于stop。
3.如果step是负整数,则最后一个元素(start + i * step)大于stop。
4.step参数必须是非零整数,否则抛出VauleError异常。
range这个内建函数可以创建一个数字组成的列表,常用作为下标,也就是之前讲到的索引
上面例子里的range(0, 100, 3) 0就是起始下标,100是结束注意100是不包括下列表里的,3是间隔或者叫做步长

再看一个迭代字典的例子>>dict = {"key1":"value1","key2":"value2","key3":"value3","key4":"value4"}我们可以用键去获得值,>>for key in dict: >>print(dict[key])也可以直接用一个元组把键和值都取出来>>for k,v int dict.items(): >>print(k +v)


zip()

同样看下定义
zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素按顺序组合成一个tuple,每个tuple中包含的是原有序列中对应序号位置的元素,然后返回由这些tuples组成的list。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。在所有参数长度相同的情况下,zip()与map()类似,没有参数的情况下zip()返回一个空list。
利用*号操作符,可以将list unzip(解压成单独的序列)

举个例子我们要a,b2个列表每项都加起来,并且新的列表的长度等于2个列表中段的那个长度>>a=["a1","a2","a3"]>>b=["b1","b2","b3","b4"]>>c=[]首先获得新的列表的长度>>length = len(a) if len(a) < len(b) else len(b)看到没,之前学过的三木表达式在这就用上了>>for i in range(length) >>c.append(a[i] + ":" + b[i])这里用到我们学过的range内建函数,也可以试试我们新学的zip内建函数>>for x,y in zip(a,b): >>c.appen(x+ ":" +y)


while

语法

while : state1else: state2break用于跳出while循环continue用于跳过当前迭代

举个例子>>i=0>>while i <10: >>i+=1 >>if i==5: >>continue >>elif i == 8: >>break >>else: >>print(i)123467可以看到遇到5就从continue的位置执行到while里面最后一行,意思就是不执行下面的逻辑了,直接进入下一次迭代而break就是直接跳出while循环了


最后看一个比较好玩的列表应用
列表解析

首先还是先看定义
在一个序列的值上应用一个任意表达式,将其结果收集到一个新的列表中并返回。它的基本形式是一个方括号里面包含一个for语句对一个iterable对象迭代

还是举个简单的例子理解下有一个a列表>>a=[1,2,3,4,5,6,7,8,9,10]我们需要找到a列表里所有的偶数>>b=[i for i in a if i % 2 == 0]>>b=[2,4,6,8,10]甚至我们还可以找出这些数的平方>>c=[i*i for i in a if i % 2 == 0]>>c=[4,16,36,64,100]是不是顿时觉得python更有趣了?


总结



至此,所有的逻辑控制我们都已经大致了解了,结合之前学过的基本类型和集合,我们已经可以应对大多数的开发需求了,剩下的就是I/O处理和如何把我们的程序写了模块化,通用化

相关阅读:
Top