1.2 More About Python
一 条件condition
1 if语句——条件表达式expression条件为true时执行代码块 expr_trhe_sute;代码块必须缩进(通常为4个空格)
语法:if expression:
expr_true_suite
2 else语句——expression条件为false时候执行代码块 expr_false_suite;代码块必须缩进;else语句不缩进
语法:if expression:
expr_true_suite
else:
expr_false_suite
3 elif语句——多分支结构
语法:if expression:
expr_true_suite
elif expression2:
expr_true2_suite
else:
none_of_the_obove_suite
4 条件嵌套——同等缩进为同一条件嵌套
例子及结果:
1 k=raw_input('input the index of shape:') 2 if k=='1': 3 print 'circle' 4 elif k=='2': 5 print 'oval' 6 elif k=='3': 7 sd1=int(raw_input('the first side:')) 8 sd2=int(raw_input('the second side:')) 9 if sd1==sd2: 10 print "the square's area is:%d"%(sd1*sd2) 11 else: 12 print "the rectangle's area is:%d"%(sd1*sd2) 13 print 'rectangle' 14 elif k=='4': 15 print 'triangle' 16 else: 17 print 'you input the invalid number'
1 runfile('C:/Users/john/Desktop/hello world.py', wdir='C:/Users/john/Desktop') 2 3 input the index of shape:3 4 5 the first side:2 6 7 the second side:5 8 the rectangle's area is:10 9 rectangle
二 range和xrange
1 range()——生成一个真实的列表
语法:range(start,end,step=1)
range(start,end) 默认step值为1
range(end) 默认start值为0
start起始值(包含)end终值(不包含)step步长(不能为0)
>>>range(3,11,2)
[3,5,7,9]
>>>range(3,11)
[3,4,5,6,7,8,9,10]
>>>range(11)
[0,1,2,3,4,5,6,7,8,9,10]
2 xrange()——语法同range;不同在于:range返回列表,xrange返回生成器、range生成真实列表,xrange则用多少生成多少,更节省内存
在Python3中range已经成为xrange,若想要生成列表可用list(range)
三 循环
1 while——赋初值;注意表达式;不要害怕死循环
2 for——适合循环次数确定的情况下:遍历一个数据集内的成员、在列表解析中使用、生成器表达式中使用
语法:for iter_var in iterable_object:
suite_to_repeat
可迭代对象 iterable_object: String、List、Tuple、Dictionary、File
列表解析语法规则用[]; 生成器表达式和xrange比较像,用于数据量较大时候
四 循环中的break,continue和else
1 break——跳出循环
eg1:
eg2:输出2-100之间的素数 (2~根号x之间没有x的约数)分别以while和for【不懂】
2 continue语句——在while和for循环中,continue语句的作用是:停止当前循环,重新进入循环;while循环则判断循环条件是否满足;for循环则判断迭代是否已经结束
左边:i=3时候结束循环直接跳出,所有没有print i=3
右边:i=4时候继续循环,所以直接跳过了print 进入i=4
3 循环中的else——如果循环代码从break处终止,跳出循环;正常结束循环,则执行else中的代码
课程案例:猜数字游戏——程序随机产生一个0~300之间的整数;玩家竞猜,系统给出“猜中”、“太大了”、“太小了”的提示;允许玩家自己控制游戏次数,不想玩了可以退出。
1 from random import randint 2 x=randint(0,300) 3 print x 4 print 'please input a number between 0~300:' 5 for count in range(0,5): 6 digit=input() 7 if digit==x: 8 print 'Bingo!' 9 elif digit>x: 10 print 'Too large,please try again.' 11 else: 12 print 'Too small,please try again.'
五、Self-defined Functions自定义函数【**】
1 自定义函数的创建
语法:def function_name([arguments]):
"optional documentation string"
function_suite
函数调用方式:函数名(参数),没有参数小括号也不行省
eg:输出1-100之间的素数【不懂】
from math import sqrt def isprime(x): if x==1: return False k=int(sqrt(x)) for j in range(2,k+1): if x%j==0: return False return True for i in range(2,101): if isprime(i): print i,
out:
runfile('C:/Users/john/Desktop/hello world.py', wdir='C:/Users/john/Desktop')
5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
2 默认参数——函数的参数可以有一个默认值,如果提供默认值,在函数定义中,默认参数以赋值语句的形式提供;默认参数可以改变
3 传递函数
4 匿名函数
【被跳过了】
六、递归recursion:递归是最能表现计算思维的算法之一;循环---(生成裴波那契数列的方法)---递归;递归必须要有边界条件,即停止递归的条件n==0 or n==1;递归的代码更简洁,更符合自然逻辑,更容易了解。
递归的执行:逐层递归调用;遇到边界条件停止递归;逐层返回调用至最初层;系统资源消耗比循环大。
eg.0,1,1,2,3,5,8,···
举例: 简化版汉诺塔游戏
三个塔座ABC上各有一根针,通过B把64个盘子从A针移动到C针上,移动时必须遵守下列规则:(1)圆盘可以插在ABC塔座的针上(2)每次智能移动一个圆盘(3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上
#filename:hanoi.py def hanoi(a,b,c,n): if n==1: print a,'->',c else: hanoi(a,c,b,n-1) print a,'->',c hanoi(b,a,c,n-1) hanoi('a','b','c',4) ##课后作业:n个盘子需呀多少步骤31 15 7 3 runfile('C:/Users/john/Desktop/hello world.py', wdir='C:/Users/john/Desktop') a -> b a -> c b -> c a -> b c -> a c -> b a -> b a -> c b -> c b -> a c -> a b -> c a -> b a -> c b -> c
【答案是对的然而。。看不懂】
七、变量作用域scope of variable: 全局变量,局部变量。内层屏蔽外层;可以用global语句进行全局变量定义;编程要求内部内聚性强,与其他模块耦合性较差,全局变量不符合这一要求,但若能给程序带来较大便利则可用。