for循环和可迭代对象遍历
可迭代对象:
python包含以下几种可迭代对象:
1.序列。包含:字符串、列表、元组
2.字典
3.迭代对象
4.生成器函数
sum_all=0 sum_odd=0 sum_even=0 for x in range(101): sum_all += x if x%2==1: sum_odd += x else: sum_even += x print("1-100累加和为{0},奇数和为{1},偶数和为{2}".format(sum_all,sum_odd,sum_even))
运行结果:
嵌套循环
一个循环体内嵌入另一个循环
【操作】利用循环写出九九乘法表
for m in range(1,10): for n in range(1,m+1): print("{0}*{1}={2}".format(m,n,(m*n)),end="\t") print()
运行结果:
break语句
break语句可用于while和for循环,用来结束整个循环
【操作】使用break语句结束循环
while True: a=input("请输入一个字符(输入Q或q结束)") if a=="q" or a=="Q": print("循环结束") break else: print(a)
运行结果:
continue语句
continue语句用于结束本次循环,继续下一次。多个循环嵌套时,continue也是应用于最近的一层循环
【操作】要求输入员工的薪资,若薪资小于0则重新输入,最后还打印出录入员工的数量和薪资明细,以及平均薪资
empNum=0 salarySum=0 salarys=[] while True: s=input("请输入员工的薪资(按Q或q结束)") if s.upper()=='Q': print("录入成功,退出") break if float(s)<0: continue empNum +=1 salarys.append(float(s)) salarySum+=float(s) print("录入薪资:",salarys)
运行结果:
循环代码优化
1.尽量减少循环内部不必要的计算
2.嵌套循环中,尽量减少内层循环的计算,尽可能向外提
3.局部变量查询较快,尽量使用局部变量
其他优化手段:
1.连接多个字符串,使用join()而不用+
2.列表进行元素插入和删除,尽量在列表尾部操作
使用zip()并行迭代
可以通过zip()函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停止
#测试zip()并行迭代 names=("小A","小B","小C","小D") ages=(18,19,20,22) citys=("北京","上海","广州","深圳") for name,age,city in zip(names,ages,citys): print("{0}--{1}--{2}".format(name,age,city))
运行结果:
推导式
先执行for循环,再给前面的x赋值
y=[x*2 for x in range(1,5)] print(y)
运行结果:[2,4,6,8]
my_text="abcdefg,higklmn,abcdkelei" char_count={c:my_text.count(c) for c in my_text} print(char_count)
运行结果:
b={x for x in range(1,100) if x%7==0} print(b)
运行结果:
一个生成器只能运行一次。第一次迭代可以得到数据,第二次迭代发现数据已经没有了
gnt=(x for x in range(4)) print(tuple(gnt)) print(tuple(gnt))
运行结果:
综合练习
import turtle t=turtle.Pen() my_colors=("blue","red","yellow","green") t.width(4) t.speed(10) for i in range(5): t.penup() t.goto(0,-i*10) t.pendown() t.color(my_colors[i%len(my_colors)]) t.circle(20+i*10) turtle.done()
运行结果:
import turtle width=30 num=18 x1 = [(-300,300),(-300+width*num,300)] y1 = [(-300,300),(-300,300-width*num)] t=turtle.Pen() t.speed(10) for i in range(0,19): t.penup() t.goto(x1[0][0],x1[0][1]-30*i) t.pendown() t.goto(x1[1][0],x1[1][1]-30*i) for i in range(0,19): t.penup() t.goto(y1[0][0]+30*i,y1[0][1]) t.pendown() t.goto(y1[1][0]+30*i,y1[1][1]) turtle.done()
运行结果:
函数用法和底层分析
函数是可重用的程序代码块。函数的作用,不仅可以实现代码的复用,更能实现代码的一致性。
python函数的分类
1.内置函数
2.标准库函数
3.第三方库函数
4.用户自定义函数
函数的定义和调用
#测试函数的定义和调用 def test01(): print("**"*5) print("^^^"*4) for i in range(10): test01()
在python中,一切都是对象,函数一定要先定义后调用
形参和实参
参数列表
1.圆括号内是形式参数列表,有多个参数则使用逗号隔开
2.形式参数不需要声明类型,也不需要知道函数返回值类型
3.无参数,也必须保留空的圆括号
4.实参列表必须与形参列表一一对应
用三个引号引起来的字符串为函数注释
def printMax(a,b): '''用于比较两个数的大小,打印较大值''' if a>b: print(a,'较大值') else: print(b,'较大值') printMax(10,20) printMax(30,5) help(printMax.__doc__)
运行结果:
返回值
return返回值要点:
1.如果函数体中包含return语句,则结束函数执行并返回值。
2.如果函数体中不包含return语句,则返回None值。
3.要返回多个返回值,使用方法、元组、字典、集合将多个值“存起来”即可。
def add(a,b): print("计算两数之和:{0}".format(a+b)) return a+b c=add(20,60)
运行结果: