练习
data1=int(input('请输入第一个数:'))
data2=int(input('请输入第二个数:'))
sum=0
a=[]
for i in range(data1,data2):
j=2
while i>j:
if i%j==0:
break
j+=1
else:
a.append(i)
sum += i
print(a)
print('和为:',sum)
k = 0
while k < len(a):
if k == 0:
max = a[k]
min = a[k]
else:
if a[k] > max:
max = a[k]
elif a[k] < min:
min = a[k]
k += 1
print('最大值:', max, '最小值:', min)
输出:
函数
def dylc(): # 定义函数 :def 函数名():
print('1楼 化妆品')
print('2楼 女装')
print('3楼 男装')
print('4楼 电子产品')
floor=int(input('请输入楼层:'))
if floor==1:
print('1.大悦城欢迎您')
dylc()
print('您在1楼')
elif floor==2:
print('2.大悦城欢迎您')
dylc()
print('您在2楼')
elif floor==3:
print('3.大悦城欢迎您')
dylc()
print('您在3楼')
elif floor==4:
print('4.大悦城欢迎您')
dylc()
print('您在4楼')
输出
def jiafa(a,b): #定义一个带参数的函数 a,b为参数(形参)
c=a+b # c 为运算的结果
print('%d + %d = %d'%(a,b,c)) #输出计算结果
jiafa(39,2) #调用函数 (实参)
输出
返回值 return 没有return的返回None
def sum(a,b):
sum=a+b
return sum
x=sum(3,7)
if x>10:
print('和为:%d'%x,'>10奖励')
else:
print('不打折')
输出:
返回多值
def jisuan(a,b):
c=a+b
d=a-b
e=a*b
f=a/b
return c,d,e,f
x=jisuan(6,9) #返回的是一个元组
print(x)
c,d,e,f=jisuan(6,9) #返回的是数值
print(c,d,e,f)
输出:
函数值不可变
def hs(a):
a+=2
b=4
hs(b)
print(b)
输出
def kb(a): #定义函数
a.append(3) #列表里添加函数
a=6
b=[]
kb(b) #调用函数kb
print(b)
输出
关键字参数
def pt(name,age,sex):
print('我叫',name)
print('年龄',age)
print('性别',sex)
pt(sex='女',name='张三',age=23)
输出:
默认参数
def pt(name,age,sex='男'): # 男为默认参数
print('我叫',name,end='\t')
print('年龄',age,end='\t')
print('性别',sex)
pt('李雷',23)
pt('韩梅梅',18,sex='女')
pt('小明',30,sex='男')
输出
#可变参数
def pt(*args): # 带一个*arge的是可变参数
print(args)
for i in args:
print(i,end=' ')
print()
pt(1,2,3)
pt('a','d',3,6,'s','f')
输出:
def sxh(**kwargs):
print(kwargs)
for k,v in kwargs.items():
print(k,v,end=' ')
print()
sxh(name='张三',age=18,sex='男')
sxh(name='小明',age=20,sex='女',address='北京')
输出
逻辑错误
def sxh(a,b,s=[]):
#这种输出时会有逻辑错误,无语法错误,这种时更改会影响其他的使用
s.append('x') #想要的结果为 :1,2,x 和 10,2,x
print(a,b,s) #而实际输出的为:1,2,x 和 10,2,x,x
sxh(1,2)
sxh(10,2)
输出
python函数可以内部调用,其他语言则不可以—嵌套
def waibu():
print('1111')
def neibu():
print('222')
neibu()
waibu()
输出
全局变量和局部变量:函数里定义的是局部变量;函数外定义的是全局变量
局部变量走完,再走全局变量
a=0
def hs():
a=2
print(a)
hs()
print(a)
输出:
a=[]
def hs():
a.append(1)
hs()
print(a)
输出
全局变量和局部变量优先选取局部变量,可以读取全局变量但不可使用
a=3
def hs():
a+=5 #程序报错: 在使用局部变量时,并没有定义所使用的 a 的值
hs()
print(a)
输出
修改:
a=3
def hs(a): # 选取的是全局变量的a
a+=5
print(a)
hs(a)
print(a)
输出
a=3
def hs():
print(a) #内部找不到到外部去找 使用全局变量a=3 输出3
hs()
print(a) #输出的是函数外的全局变量 a=3
输出
global ** :声明使用的是全局变量
a=3
def hs():
global a #使用全局变量
a=5 #重新对使用的全局变量进行赋值
print(a)
hs()
print(a)
输出
nonlocal 非全局的外部声明使用
def wb():
a=3
def nb():
nonlocal a
a=4
print(a)
nb()
print(a)
wb()
输出
LEGB:
L->LOCAL: 局部作用域
E->ENCLOSE:嵌套作用域
G->GLOBAL:全局作用域
B->BUILT-IN: 内置作用域
c=98
def wb():
d=39
e=67
def nb():
e=34
print(e) #LOCAL
print(d) #ENCLOSE
print(c) #GLOBAL
print(max) #BUILT-IN
nb()
wb()
输出
递归:
def jiacheng(n):
if n==1:
return 1
else:
return n*jiacheng(n-1)
print(jiacheng(6))
输出
#斐波那契数列
def fbnq(n):
if n==1 or n==2:
return 1
else:
return fbnq(n-1)+fbnq(n-2)
for i in range(1,13):
print('第%d个月的兔子是:'%i,fbnq(i))
输出
匿名函数
x=lambda x:2*x+5
print(x(2))
输出
y=lambda a,b:a+b/2
print(y(10,4))
输出
a={'name':'小明','age':19,'address':'北京'}
x=lambda b:b['name']
print(x(a))
输出
a=(2,45,-98)
b=max(a,key=abs) #abs()取绝对值 key= 表示取最大值的标准
print(b)
输出
a=[2,-1,5,0,23,-7]
a.sort(key=abs) #以绝对值的大小来进行排序
print(a)
输出
a=[
{‘name’:‘小明’,‘age’:23,‘address’:‘北京’},
{‘name’:‘小红’,‘age’:18,‘address’:‘海南’},
{‘name’:‘小张’,‘age’:25,‘address’:‘丹东’},
{‘name’:‘小李’,‘age’:30,‘address’:‘云南’}
]
b=max(a,key=lambda x:x[‘age’])
print(b)
输出
在开始的时候函数是没有被调用的,所以i以最后的值为准
i=10
def a(x):
print(x*i)
i=20
def b(x):
print(x*i)
i=30
def c(x):
print(x*i)
a(3)
b(3)
c(3)
输出
a=[lambda x:x*i for i in range(3)]
#在x没有被赋值之前不执行lambda的函数体,而当x被赋值是i为最后一次的值
print(a0)
print(a1)
print(a2)
输出