文章目录
循环结构
for循环和可迭代对象遍历
for循环通常用于可迭代对象的遍历
for 变量 in 可迭代对象
循环体语言
【操作】遍历一个元组或列表、字符串、字典
for x in (20,30,40):#元组
print(x*2)
*********************
for y in 'aswerg':#遍历字符串中的字符
print(y)
*********************
d ={'name':'gaoqi','age':'18','add':'NO:001'}
for x in d:#遍历所有的key
print(x)
for x in d.keys():#遍历所有的key
print(x)
for x in d.values():#遍历所有的值
print(x)
for x in d.items():#遍历所有的键值对
print(x)
可迭代对象
python包含以下几种可迭代对象:
1、序列:包含:字符串、列表、元组
2、字典
3、迭代器对象(iterator)
4、生成器函数(generator)
range对象
range对象是一个迭代器对象,用来产生指定范围的数字序列。
range(start,end,[step])
数值从start开始(默认为0),end结束(不包含end),step为步长(默认为1)
【操作】利用for循环,计算1-100之间数字的累加和;计算1-100之间偶数的累加和;计算1-100之间奇数的累加和
sum = 0
for x in range(1,101):
sum=sum+x
print(sum)
*****************************
sum = 0
for x in range(1,101,2):#奇数
sum=sum+x
print(sum)
**************************
sum = 0
for x in range(0,101,2):#偶数
sum=sum+x
print(sum)
嵌套循环
一个循环体内可以嵌入另一个循环,一般称为嵌套循环,或者多重循环
【操作】打印如下图案
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
for x in range(5):
for y in range(5):
print(x,end = '\t')
print()
【操作】利用嵌套循环打印九九乘法表
for b in range(1,10):
for a in range(1,10):
if a<=b:
print(b,'*',a ,'=' ,a*b,end= '\t')
else:
print()
**************************************************
for b in range(1,10):
for a in range(1,b+1):#a的值只取1~b
print('{0}*{1}={2}'.format(b,a,a*b),end='\t')#注意该条代码
print()
【操作】用列表和字典存储下表信息,并打印出表中高于15000的数据
tb=[]
r1=dict(name ='高小一',age=18,salary=30000,city='北京')
r2=dict(name ='高小二',age=19,salary=20000,city='上海')
r3=dict(name ='高小五',age=20,salary=10000,city='深圳')
tb=[r1,r2,r3]
for x in tb:
if x.get("salary") > 15000:
print(x)
break语句
break语句可用于while和for循环,用来结束整个循环。当有嵌套循环时,break语句只能跳出最近一层的循环。
【操作】使用break语句结束循环
while True:
a=input('请输入一个字符(输入Q或q结束)')
if a.upper()=='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('员工数{0}'.format(empNum))
print('录入薪资:',salarys)
print('平均薪资{0}'.format(salarySum/empNum))
else语句
while、for循环可以附带一个else语句(可选)。如果for、while语句没有被break语句结束,则会执行else语句,否则不执行。
while 条件表达式:
循环体
else:
语句块
for 变量 in 可迭代对象:
循环体
else;
语句块
【操作】员工一共4人,录入这四位员工的薪资。全部录入后,打印提示‘您已经全部录入4名员工的薪资。最后,打印输出录入的薪资和平均薪资’
salarySum = 0
salarys = []
for i in range(1,5):
i = input('请输入员工的薪资:')
salarys.append(float(i))
salarySum += float(i)
print('您已全部录入4位员工的薪资')
print('录入薪资:',salarys)
print('平均薪资{0}'.format(salarySum/4))
****************************************
salarySum = 0
salarys = []
for i in range(4):
s = input('请输入4名员工的薪资(按Q或q中途结束)')
if s.upper()=='Q':
print('录入完成,退出')
break
if float(s)<0:
continue
salarys.append(float(s))
salarySum += float(s)
else:
print('您已经全部录入4名员工的薪资')
print('录入薪资:',salarys)
print('平均薪资{0}'.format(salarySum/4))
循环代码优化
遵循下面三个原则可以大大提高运行效率,避免不必要的低效计算:
1、尽量减少循环内部不必要的计算
2、循环嵌套中,尽量减少内循环的计算,尽可能向外提
3、局部变量查询较快,尽量使用局部变量
其它优化手段:
1、连接多个字符串,使用join而不是用+
2、列表进行元素插入和删除,尽量在列表尾部操作
使用zip()并行迭代
通过zip()函数对多个序列进行并行迭代,zip()函数在最短序列‘用完’时就会停止。
【操作】测试zip()并行迭代
names = ('高崎','高老二','高老三','高老四')
ages = (19,17,18,27)
jobs =('老师','程序员','公务员')
for name,age,job in zip(names,ages,jobs):
print('{0},{1},{2}'.format(name,age,job))
for i in range(3):
print('{0}--{1}--{2}'.format(names[i],ages[i],jobs[i]))
推导式创建序列
推导式时从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合,从而避免冗长的代码。
列表推导式
#使用列表推导式
y = [x*2 for x in range(1,5)]
print(y)
#不使用推导式
y=[]
for x in range(1,5):
y.append(x*2)
print(y)
*****************************************
#使用列表推导式
y = [x**2 for x in range(1,50) if x%5==0]
print(y)
*****************************************
cells=[(row,col)for row in range(1,10)for col in range(1,10)]
for cell in cells:
print(cell)
字典推导式
{key_expression:value_expression for 表达式 in 可迭代对象}
也可增加if条件判断,多个for循环
#统计文本中字符出现的次数
my_text = 'i love python ,i love myself,i love nature '
char_count = {c:my_text.count(c) for c in my_text}
print(char_count)
#遍历my_text,将每一个字符都取出作为key,统计每一个字符在my_text中出现的次数
集合推导式
与列表推导式的语法格式类似:
{表达式 for item in 可迭代对象}或者{表达式 for item in 可迭代对象 if 条件判断}
b = {x for x in range(1,100)if x%9==0}
print(b)
生成器推导式(生成元组)
生成器推导式的语法格式与其它推导式时一样的,不同的是,外部使用的是小括号。
运行时,返回的是一个生成器对象。
一个生成器只能运行一次,第一次迭代有数据,第二次迭代数据就不存在了
gnt = (x for x in range(4))
print(gnt)-----<generator object <genexpr> at 0x7fdc1f243c00>
print(tuple(gnt))-----(0, 1, 2, 3)
print(tuple(gnt))-----()#打印也属于遍历
********************************************
gnt = (x for x in range(4))
for x in gnt:#遍历生成器
print(x,end=',')
综合练习
【操作】绘制不同颜色的多个同心圆_绘制棋盘
import turtle
my_colors=('orange','green','gray','pink')
t =turtle.Pen()
t.speed(0)
t.width(2)
for i in range(30):
t.color(my_colors[i%4])
t.goto(0,i*(-5))
t.pendown()
t.circle(5+5*i)
t.penup()
turtle.done()
函数用法和底层分析
函数是可重复使用的程序代码块,函数的作用,不仅可以实现代码的重复使用,更能实现代码的一致性。一致性指的是只要修改函数的代码,则所有调用该函数的地方都能得到体现。
函数简介
函数的基本概念
1、一个程序由一个个任务组成,函数就是代表一个任务或者一个功能
2、函数是代码复用的通用机制
python函数的分类
1、内置函数
例如list(),str(),len()等,可以拿来直接使用
2、标准库函数
通过import语句导入库,然后使用其中定义的函数
3、第三方库函数
python社区提供的高质量的库,下载安装这些库后,也可以通过impory语句导入进行使用
4、用户自定义函数
用户自己定义的函数,也是开发中使用用户自身需求定义的函数
函数的定义和调用
核心要点
def 函数名([参数列表]): "‘文档字符串’" 函数体/若干语句
def jining():
print("*"*10)
for i in range(10):
jining()
要点
1、使用def来定义函数,def后加空格和函数名称
python执行def时,会创建一个函数对象,并绑定到函数名变量上
2、参数列表
(1)圆括号内是形式参数列表,有多个参数,则使用逗号隔开
(2)形式参数不需要声明类型,也不需要指定函数返回值类型
(3)无参数,也必须保留空的圆括号
(4)实参列表必须与形参列表一一对应
3、return返回值
(1)如果函数中包含return语句,则结束函数执行并返回值
(2)如果函数体中不包含return语句,则返回None值
4、调用函数之前,必须要先定义函数,即先调用def创建函数对象
(1)内置函数对象会自动创建
(2)标准库和第三方库函数,通过import导入模块时,会执行模块中的def语句
形参和实参
形参:定义函数的时候使用,在函数内部进行使用,当作局部变量来使用
实参:调用函数时用到的实际参数
注意:多个函数之间使用英文版逗号隔开
def printMax(a,b):
'''用于比较两个数的大小,打印较大的值'''
if a>b:
print(a,'较大值')
else:
print(b,'较大值')
printMax(323,456)
文档字符串(函数的注释)
三个单引号可以定义多个字符串
程序的可读性最重要,建议在函数体开始的部分附上函数定义说明,即文档字符串,也称为函数的注释。通过三个单引号或三个双引号实现,中间可以加入多行文字进行说明。
help(printMax.__doc__)#双下划线
返回值详解
return 返回值要点:
1:如果函数体中包含return语句,则结束函数执行并返回值
2:如果函数中不包含return语句,则返回none值
3:要返回多个返回值,使用列表、元组、字典、集合等多个值’存起来‘即可
#测试返回值的基本用法
def add(a,b):
print('计算两个数的和:{0},{1},{2}'.format(a,b,(a+b)))
return a+b
def test02():
print('sxt')
print('gao')
return #return的两个作用:1,返回值;2、结束函数的执行
print('hello')
#运行结果:sxt gao
def test03(x,y,z):
return[x*10,y*10,z*10]
c = add(30,40)*10
print(c)#运行结果计算两个数的和:30,40,70
#700
d = test02()
print(d)#运行结果:None
print(test03(4,3,2)) #运行结果:[40, 30, 20]
return总结:在python中,函数需要有返回值时,则必须要有return加上要返回值的代码
如果不需要返回值,则return可写可不写,如果不写,python也会默认为none。20