一、程序结构
程序结构:语句和表达式按照什么样的顺序执行
所有语言无非就三种程序结构: 顺序:默认结构
语句从上到下依次一行一行的执行, 分支:选择一个分支执行,永远最多只执行一个分支 循环: 二、分支结构语句 1、Python的比较操作
所有的Python对象都支持比较操作,可用于测试相等性、相对大小等
如果是复合对象,Python会检查其所有部分,包括自动遍历各级嵌套对象,直到可以得出最终结果 测试操作符:
“ ==”操作符测试值的相等性
“is”表达式测试对象的一致性
还有很多比如: <,>,=, Python中不同类型的比较方法:
数字:通过相对大小进行比较
字符串:按照字典次序逐字符进行比较
列表和元组:自左至右比较各部分内容
字典:对排序之后的(键、值)列表进行比较 Python中真和假的含义
非零数字为真,否则为假
非空对象为真,否则为假
None则始终为假 组合条件测试
and
or
not 非运算:返回True或False 注意:Python中,and和or运算会返回真或假的对象,而不是True或False,
and和or是短路操作符 2、分支结构
if boolean_expression1: # boolean_expression 布尔表达式可为真可为假
suite1
elif boolean_expression2:
suite2
…
else:
else_suite
elif 语句是可选的,else语句也是可选的
仅用于占位,而后再填充相关语句时,可以使用pass
In [168]: a = 5 # 主干
In [169]: if a < 10: # 分支结构
...: print("a less than 10") # 分支结构
...: print(a) # 主干
...:
a less than 10
5
In [41]: x=3
In [42]: y=4
In [45]: if x<y: # 单分支
print y
....:
4
In [48]: if x<y: # 双分支
....: print "the max number is: %d" %y
....: else:
....: print "the max number is: %d" %x
....:
the max number is: 4
In [51]: if x<y: # 多分支
....: print y
....:elif x>y:
....: print x
....:else:
....: print x,y
....:
4 3、if/else三元表达式
通常在为某变量设定默认值时通常用到的如下格式
if X:
A = Y
else:
A = Z
可以改写为如下简短格式:
A = Y if X else Z # 如果X是True则,A=Y,否则A=Z 其通用条件表达式语法格式为: expression1 if boolean_expressionelse expression2
表达式1 条件(布尔表达式) 表达式2
如果boolean_expression的值为True,则条件表达式的结果为expression1,否则为expression2 三、循环结构语句 1、循环机制及应用场景
while循环 用于编写通用迭代结构
顶端测试为真即会执行循环体,并会重复多次测试直到为假后执行循环后的其它语句
for循环
一个通用的序列迭代器,用于遍历任何有序的序列对象内的元素
可用于字符串、元组、列表和其它的内置可迭代对象,以及通过类所创建的新对象 2、while
语法格式: while boolean_expression: while_suite else: else_suite
else分支为可选部分
只要boolean_expression的结果为True,循环就会执行;
boolean_expression的结果为False时终止循环,此时如果有else分支,则会执行一次。
一定要有某种机制来退出循环,通常是在需循环体里修改条件
In [183]: i = 0
In [184]: while i < 10:
...: print(i)
...: i += 1
...:
0
1
2
3
4
5
6
7
8
9 3、for/in
语法格式: for expression1 in iterable: # interable为可迭代对象 for_suite else: else_suite
通常,expression或是一个单独的变量,或是一个变量序列,一般以元组的形式给出
如果以元组或列表用于expression,则其中的每个数据项都会拆分到表达式的项,
In [191]: for i in range(10):
...: print(i)
...:
0
1
2
3
4
5
6
7
8
9
for/in循环中永远不要修改可迭代对象 3、break、continue 、pass 和else
break
跳出所处的最近层循环
continue
跳过循环题剩下的部分,跳到所处的最近层循环的开始处;
break,continue 只能出现在循环结构中
In [200]: for i in range(10):
...: if i == 5:
...: continue
...: print(i)
...:
0
1
2
3
4
6
7
8
9
In [201]: for i in range(10):
...: if i == 5:
...: break
...: print(i)
...:
0
1
2
3
4
pass
占位语句
当语法需要语句但还没有任何实用语句可写时使用
else代码块
只要循环是正常终止,else分支就会执行
在由于break语句、或由于返回语句(如果循环在函数或方法内)、或由于发生异常导致跳出循环,则else分支不会执行 4、循环语法格式扩展
语法格式:
while boolean_expression1:
while_suite
if boolean_expression2:
break
if boolean_expression3:
continue
else:
else_suite
for expressionin1 iterable:
for_suite
if boolean_expression2:
break
if boolean_expression3:
continue
else:
else_suite
In [85]: url="www.magedu.com";x=0
In [86]: while url:
....: print url
....: url=url[:-1]
....: x +=1
....: if x>7:
....: break
....: else:
....: print "game over"
....:
www.magedu.com
www.magedu.co
www.magedu.c
www.magedu.
www.magedu
www.maged
www.mage
www.mag
In [87]:
死循环
while True:
shile_suite
没有退出条件,一直执行循环体 练习: 1、求100万以内的所有素数
假如a*b=c(a、b、c都是整数),那么我们称a和b就是c的因数。
质数:又称素数,除了1和它本身以外不再有其他因数的数称为质数。
0和1都既不是质数也不是合数
为什么质数检验到N的开方就可以结束了?
因为所有N的除数都是以根号N为轴对称的
假如一个数N是合数,它有一个约数a,a×b=N,则a、b两个数中必有一个大于或等于根号N,一个小于或等于根号N;因此,只要小于或等于根号N的数(1除外)不能整除N,则N一定是素数.
所以判断一个数为质数与否的复杂度为O(根号N)
判断一个数是否素数的方法:
In [6]: x = 10
In [7]: for i in range(2, x):
...: if x % i == 0:
...: break
...: else:
...: print(x)
...:
In [8]: x = 7
In [9]: for i in range(2, x):
...: if x % i == 0:
...: break
...: else:
...: print(x)
...:
7
100以内的素数及其总个数:
In [25]: c = 0
In [26]: for x in range(2, 100):
...: for i in range(2, x):
...: if x % i == 0:
...: break
...: else:
...: print(x)
...: c += 1
...: print("sum is: ",c)
...:
...:
...:
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
sum is: 25
100W以内的素数个数:
In [41]: c = 0
In [42]: for x in range(2, 1000000):
...: for i in range(2, int(x ** 0.5) + 1):
...: if x % i == 0:
...: break
...: else:
...: c += 1
...: print(c)
...:
78498 2、求任意整数的级数和
无穷级数中,几何级数又称为等比级数。
几何级数(即等比级数)的和为:当︱q︱<1 时a+aq+aq^2+……+aq^n+……=a/(1-q)
sum = 0
In [44]: for n in range(11):
...: sum += 3 * 2**n
...: print(sum)
...:
3
9
21
45
93
189
381
765
1533
3069
6141
In [45] 3、求菲波那切数列的第101位
斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........
这个数列从第3项开始,每一项都等于前两项之和
In [52]: for i in range(0, 102):
...: if i == 0: