--逻辑控制

Posted TonyW92

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了--逻辑控制相关的知识,希望对你有一定的参考价值。

导读



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

算数运算符



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

比较运算符



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

逻辑运算符



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

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


赋值



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

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

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

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

>>a,b = b,a


逻辑控制



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

条件判断

if关键字
语法:

if case1:
    state1
elif case2:
    state2
elif case3:
    state3
else:
    state4

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

举个小例子
新建一个py文件
#!/usr/lib/env python 这个是用于解释说明python的环境
#coding:utf-8

n = 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
>>c
4

和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 条件:
    state1
else:
    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 :
    state1
else:
    state2
break
用于跳出while循环
continue
用于跳过当前迭代

举个例子
>>i=0
>>while i <10:
    >>i+=1
    >>if i==5:
        >>continue
    >>elif i == 8:
        >>break
    >>else:
        >>print(i)

1
2
3
4
6
7
可以看到遇到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处理和如何把我们的程序写了模块化,通用化

以上是关于--逻辑控制的主要内容,如果未能解决你的问题,请参考以下文章

如何将百分比计算为指数级数?

C语言试题六十之请编写函数fun,计算并输出下列级数和:s=1/1*2+1/2*3+…+1/n(n+1)

C语言试题六十之请编写函数fun,计算并输出下列级数和:s=1/1*2+1/2*3+…+1/n(n+1)

:无穷级数

php过滤ascii控制字符

[激光原理与应用-23]:《激光原理与技术》-9- 控制技术-锁模技术