视频
循环控制语句
for… esle
基本使用规则,当for循环运行完成之后,执行else中的语句;
for x in range(3):
print(x)
else: # for 循环执行完毕之后进行的操作
print('helloworld')
0
1
2
helloworld
如果for循环被中断执行,那么else中的语句还会被执行吗?请看下列代码
for x in range(3):
if x == 2:
break
print(x)
else: # for 循环执行完毕之后进行的操作
print('helloworld')
0
1
如果for循环没有被执行完毕,则else语句中的代码体不再执行;
练习
设计一个银行卡ATM取款程序验证密码程序,提示用户输入密码,默认密码为 8888
:
- 如果用户密码输入错误超过3次,结束程序,并提示用户密码错误3次,请明天再试。
- 如果密码正确,打印 欢迎信息,结束程序;
p='8888'
for i in range(3):
passwd = input('请输入密码')
if passwd == p:
print('欢迎')
break
else:
print('3次密码错误,请明天重试')
while…else
基本使用,与for循环类型,当循环执行完毕时候,会自动执行else中的语句;
count = 1
while count<4:
print(count)
count+=1
else:
print('while end...')
1
2
3
while end...
如果while循环被中断,同样的else 中语句不执行;
count = 1
while count<4:
print(count)
count+=1
if count == 2:
break
else:
print('while end...')
请大家将上面ATM密码模拟程序使用While循环实现
count=0
while count<3:
count+=1
passwd = input('请输入密码')
if passwd == "8888":
print('欢迎')
break
else:
print('3次密码错误,请明天重试')
求素数
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, 'equals', x, '*', n//x)
break
else:
# loop fell through without finding a factor
print(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,1
for i in range(10):
a,b = b, a+b
print(a,end=',')
函数定义好之后,一定要调用才能被执行;
调用函数的方式: 函数名()
def f():
a,b = 0,1
for i in range(10):
a,b = b, a+b
print(a,end=',')
f() # 调用函数
# 斐波那契数列
def fib():
a,b = 0,1
for i in range(10):
a,b = b, a+b
print(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,1
for i in range(num): # 调用函数的参数
a,b = b, a+b
print(a,end=',')
print()
fib(10) #给函数传参,传入 num=10
fib(20) #传入20
函数的返回值
使用return 关键字可以将计算结果返回出来;
def add(x,y):
sum = x+y
return sum
print(add(1,2)) # 因为函数add 有返回值 打印出来的结果为返回的结果;
def add(x,y):
sum = x+y
return sum
s1 = add(1,2) # 3
s2 = add(3,4) # 7
print(add(s1,s2))
在函数中 执行到return语句,如果return下面还有代码体,则下面语句不再被执行;
def f():
return True
print('helloworld') # 下面的helloworld 不会被打印出来
f()
函数的必填参数
函数中定义参数 如果没有默认 则为必填参数;必填参数只要在函数中定义,不管在函数内部有没有被调用到都无所谓;但是在外部调用时候一定是有多少个参数,传多少个参数;
def f(x,y,z):
return True
f('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+1
print(f(1))
g = lambda x:x+1
print(g(1))
h = lambda x,y,z: 2*x+3*y+z
print(h(1,2,3))
等价于
def h(x,y,z):
return 2*x+3*y+z
print(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)