视频
循环控制语句
for… esle
基本使用规则,当for循环运行完成之后,执行else中的语句;
for x in range(3):print(x)else: # for 循环执行完毕之后进行的操作print('helloworld')
012helloworld
如果for循环被中断执行,那么else中的语句还会被执行吗?请看下列代码
for x in range(3):if x == 2:breakprint(x)else: # for 循环执行完毕之后进行的操作print('helloworld')
01
如果for循环没有被执行完毕,则else语句中的代码体不再执行;
练习
设计一个银行卡ATM取款程序验证密码程序,提示用户输入密码,默认密码为 8888 :
- 如果用户密码输入错误超过3次,结束程序,并提示用户密码错误3次,请明天再试。
- 如果密码正确,打印 欢迎信息,结束程序;
p='8888'for i in range(3):passwd = input('请输入密码')if passwd == p:print('欢迎')breakelse:print('3次密码错误,请明天重试')
while…else
基本使用,与for循环类型,当循环执行完毕时候,会自动执行else中的语句;
count = 1while count<4:print(count)count+=1else:print('while end...')
123while end...
如果while循环被中断,同样的else 中语句不执行;
count = 1while count<4:print(count)count+=1if count == 2:breakelse:print('while end...')
请大家将上面ATM密码模拟程序使用While循环实现
count=0while count<3:count+=1passwd = input('请输入密码')if passwd == "8888":print('欢迎')breakelse:print('3次密码错误,请明天重试')
求素数
for n in range(2, 10):for x in range(2, n):if n % x == 0:print(n, 'equals', x, '*', n//x)breakelse:# loop fell through without finding a factorprint(n, 'is a prime number')
列表推导式
使用for循环生成10个列表数据;
users = []for i in range(10):users.append('testuser'+str(i))print(users)
使用列表推导式
users = ['testuser'+str(i) for i in range(10)]print(users)
[]表示 生成数据为list
for i in range(10) 循环条件
“testuser”+str(i) 保存的数据
xy= [(x,y) for x in [1,2,3] for y in [1,3,4] if x!=y]print(xy)
函数
定义基本函数
可以将具有特定功能代码封装到一起,形成函数。
"""函数:def func():pass"""
定义一个基本函数
def f():pass
斐波那契数列可以使用函数的方式来定义
def f():a,b = 0,1for i in range(10):a,b = b, a+bprint(a,end=',')
函数定义好之后,一定要调用才能被执行;
调用函数的方式: 函数名()
def f():a,b = 0,1for i in range(10):a,b = b, a+bprint(a,end=',')f() # 调用函数
# 斐波那契数列def fib():a,b = 0,1for i in range(10):a,b = b, a+bprint(a,end=',')# 金字塔def pyramid():for x in range(1, 11):print(' ' * (11 - (x + 1)) + ((2 * x) - 1) * '*')
函数的参数
为函数设置参数,可以让函数功能更加灵活。设置方式为
def f(arg):pass
# 斐波那契数列def fib(num): # 添加参数,a,b = 0,1for i in range(num): # 调用函数的参数a,b = b, a+bprint(a,end=',')print()fib(10) #给函数传参,传入 num=10fib(20) #传入20
函数的返回值
使用return 关键字可以将计算结果返回出来;
def add(x,y):sum = x+yreturn sumprint(add(1,2)) # 因为函数add 有返回值 打印出来的结果为返回的结果;
def add(x,y):sum = x+yreturn sums1 = add(1,2) # 3s2 = add(3,4) # 7print(add(s1,s2))
在函数中 执行到return语句,如果return下面还有代码体,则下面语句不再被执行;
def f():return Trueprint('helloworld') # 下面的helloworld 不会被打印出来f()
函数的必填参数
函数中定义参数 如果没有默认 则为必填参数;必填参数只要在函数中定义,不管在函数内部有没有被调用到都无所谓;但是在外部调用时候一定是有多少个参数,传多少个参数;
def f(x,y,z):return Truef('a') # f 函数定义了三个参数,所以在调用的时候也要传3个参数;
以上代码因为参数个数不够,所以会报错
Traceback (most recent call last):File "C:/Users/zengy/PycharmProjects/untitled1/demo3.py", line 5, in <module>f('a')TypeError: f() missing 2 required positional arguments: 'y' and 'z'
函数参数的默认值
如果函数有默认值,传参的时候默认值处不传参,则使用默认值;如果传参,则会把默认值覆盖掉;
def study(name,place="凡猫"):print(f'{name}在{place}学习Python自动化')# 如果函数中 参数有默认值,调用的时候不传参数。会自动使用默认值study('xiaoming') #xiaoming在凡猫学习Python自动化# 覆盖掉默认值study('xiaohong','Home') # xiaohong在Home学习Python自动化
注意: 在定义函数参数的时候,必填项参数一定要放在首位,有默认值的参数要放在后面,否则会报错;
def study(place="凡猫",name):print(f'{name}在{place}学习Python自动化')
函数传参
定义的函数参数默认传参按照位置进行传参
def study(name,place="凡猫"):print(f'{name}在{place}学习Python自动化')study('xiaoming')study('xiaoming',"Home")
也可以指定参数名进行传参
study(name='xiaowang',place='Home')study(place='Office',name='xiwangm')
也可以第一个参数不指定参数名
study('xiaohong',place='office')
注意:如果第一个参数传参的时候指定了参数名,那么后面的参数也都都需要指定参数名;否则会报错;
下面代码会报错
study(name='xiaowang','office')
study(name='xiaowang','office')^SyntaxError: positional argument follows keyword argument
*args 可变长度元组参数
表示可变长度的元组类型数据,可以传参数,也可以不传参数,参数为元组类型;
# *likes 可变长度的数据 ,可以传参,也可以不传参def desc(name,hometown,age,*likes):print(type(likes)) #元组print(f'我的名字是{name},来自{hometown},今年{age}岁,我的爱好:{likes}')desc('小明','上海',20)desc('小王','背景',21,'游戏','爬山')
<class 'tuple'> ()我的名字是小明,来自上海,今年20岁,我的爱好:()<class 'tuple'> ('游戏', '爬山')我的名字是小王,来自背景,今年21岁,我的爱好:('游戏', '爬山')
**kwargs 可变长度的字典类型数据
传参数的时候 需要指定 关键字=参数值 方式传参,函数内部转化为 {key:value} 数据格式;
可以不传,也可以传多个数据;
def desc(name,hometown,age,*likes,**kwargs):print(type(kwargs),kwargs)desc('小明','上海',20)desc('小明','广州',21,project='自动化测试',workyear=3)
输出结果:
<class 'dict'> {}<class 'dict'> {'project': '自动化测试', 'workyear': 3}
参数的综合使用
def f(name,*args,place="凡猫",**kwargs):print(name)print(place)print(args)print(kwargs)# f('xiaoming')f('xiaoming',place='home')f('xiaoming','python','api','mysql',place='Home',age=10,likes=['games','study'])
lambda 表达式
def f(x):return x+1print(f(1))g = lambda x:x+1print(g(1))
h = lambda x,y,z: 2*x+3*y+zprint(h(1,2,3))
等价于
def h(x,y,z):return 2*x+3*y+zprint(h(1,2,3))
可以将函数转换为匿名函数
for x in range(1, 11):print(' ' * (11 - (x + 1)) + ((2 * x) - 1) * '*')
转换为匿名函数
f = lambda y: [print(' ' * (11 - (x + 1)) + ((2 * x) - 1) * '*') for x in range(y)]f(10)
总结

