02python基础----控制流程
写在前面:
(1)bool是一种数据类型,其值为True和False,实际上bool是内置的整数类型int的子类(class bool(int))。Python中把任意的空数据结构视为False,把任意非空结构视为True。
其实,Python中的每个对象都有其bool值。
int 0,float0.0, 空列表[],空字典{},空元组(),空集合set(),空deque() 的bool值都是False。
(2)None也是一种数据类型,它是一个真正的对象,并有一块内存,其bool值总被视为False。
(3)if语句和其他的选择工具会自动的使用数据的布尔结果。
一、分支(if)
1.1 单分支结构
if 表达式:
代码块
#检测用户是否输入了正确的用户名,使用列表保存用户名 a = ['mike', 'mary', 'john', 'tom', 'jenny', 'herry'] b = raw_input('please enter your name:') if (b in a): print('welcome', b) #检测用户是否正确输入用户名和密码,使用字典保存 d={'mike':'123','bob':'234','cc':'333','tom':'999'} name=raw_input('please enter your name:') pwd=raw_input('please enter you password:') if(name in d) and pwd==d[name]: print('welcome',name)
1.2 双分支结构
if 表达式:
代码块1
else:
代码块2
# 检测用户是否正确输入用户名和密码,使用字典保存,不正确提示重新输入 d = {'mike': '123', 'bob': '234', 'cc': '333', 'tom': '999'} name = input('please enter your name:') pwd = input('please enter you password:') if (name in d) and pwd == d[name]: print('welcome', name) else: print('请重新输入')
1.3 多分支结构
根据多个条件进行判断
if 表达式1:
代码块1
elif 表达式2:
代码块2
...
elif 表达式n:
代码块n
else:
代码块n+1
#如果用户输入管理员用户名和密码则欢迎管理员,普通用户,否则提示输入错误 admin={'admin':'111111','cc':'123456'} user={'aa':'123','bb':'234','mm':'444'} name = input('please enter your name:') pwd = input('please enter you password:') if name in admin and pwd==admin[name]: print('欢迎管理员',name) elif name in user and pwd==user[name]: print('欢迎',name) else: print('输入错误')
1.4 条件表达式(三元表达式)
表达式1 if 真值表达式 else 表达式2
a,b = 3,2 max = a if a>b else b
二、循环结构(while & for)
2.1 while语句
#计算1+2+...+100 n=1 s=0 while n<=100: s+=n n=n+1 print(s)
(1)while语句+else语句
# 检测用户是否正确输入用户名和密码,使用字典保存,不正确提示重新输入,三次机会 d = {'mike': '123', 'bob': '234', 'cc': '333', 'tom': '999'} name = input('please enter your name:') pwd = input('please enter you password:') n=0 while(name not in d or pwd!=d[name]): n=n+1 if n>2: print('输入次数超过3次') break #因为不满足while条件而退出循环,则执行else,遇到break跳出循环,不会执行后面的else print('你还有',3-n,'次机会') name = input('please enter your name:') pwd = input('please enter you password:') else: #当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句
#如果执行过程中被break啦,就不会执行else的语句啦
print('欢迎',name)
(2)for语句+else语句
l1 = [2,3,5] l2 = [1,2,3,4] for i in l1: for j in l2: if i==j: print(i,'was found') break else: print(i,'not found')#和while语句一样,如果for循环未执行break,则会执行此else
(3)break语句
跳出整个循环,break经常与if语句结合使用,用if语句判断是否满足跳出循环的条件
#求最大真因数 n=int(input('please input the number:')) m=n//2 while m>0: if n%m==0: print('最大真因数为',m) break m=m-1
(4)continue语句
跳出此次循环
#求1-100中同时被3和7整除的数的个数 n=0 m=0 while m<101: m=m+1 if m%3!=0 or m%7!=0: continue n=n+1 print('1-100中有',n,'个数可以同时被3和7整除。')
2.2 for语句
(1)enumerate语句
enumetrate函数不仅可以访问迭代对象的元素,也可以访问其索引
#输出歌手出场顺序 namelist=[u'郑智化',u'周杰伦',u'许嵩',u'叶慧美'] for n,name in enumerate(namelist): print('第',n+1,'位出场歌手:',name)
(2)range函数
#计算1+2+...+100 s = 0 for i in range(1,101): s += i print(s)
(3)xrange函数
xrange与range类似,但不会在内存中创建列表的完整副本,只能用于for循环中,在for 循环外,xrange函数没有意义
(4)迭代器
迭代器有一个next方法,调用后会扫描下一个条目,所有条目迭代后,会引发StopIteration异常告诉循环结束
(5)列表解析
for 语句也可以用于列表解析中,可以动态创建列表
l= [pow(a,2) for a in range(2,10)] print(l) teldict = {'mary':'1234', 'cc':'1111', 'dd':'2222'} print([teldict[name] for name in teldict])
打印久久乘法表:
#九九乘法表 for i in range(1,10): for j in range(1,i+1): print(j,'*',i,'=', i*j,end=' ') print()