python中的函数

python内置数据结构

数值类型
bool
str
list tuple set dict

可变数据类型 不可变数据类型
可变数据类型:list set dict(判断依据为是否可以增删改查)

有序数据类型和无序数据类型
有序:str list tuple
无序:数值 bool set
python2:dict无序 python3中:dict有序

一般情况下:有序数据类型可以索引,切片,连接,重复 但是字典除外

函数的定义

def 函数名():
函数体

li = [1,2,3]
li.copy()

定义一个函数

#在没有调用函数的情况下,函数是不会被执行的

def hello():

print(‘hello’)
print(‘hello’)

#调用函数

hello()

函数里面嵌套函数

def fentiao():

print(‘is fentiao…’)
def westos():
print(‘westos’)

westos()
fentiao()

def func1(a):

name = ‘westos’
#定义函数时的变量称为形式参数,变量名可以任意起
print(‘hello %s’ %(a))

#调用函数时的参数称为实参,该参数必须是实际存在的

func1(12)
func1(‘linux’)
func1(‘python’)

函数动态添加成员

def fun():
print(fun.x)
fun()

动态添加

fun.x = 3
fun()

动态删除

del fun.x
fun()

函数的返回值

函数调用时一般有返回值,没有定义返回值的时候,python中默认返回None
如图:
在这里插入图片描述

def hello():

print(‘hello’)

res = hello()
print(res)

def hello():

#return 返回的表达式或者变量
return ‘hello’

res = hello()
print(res)

多个返回值

def fun(a):

#接收一个列表,求这个列表的最大值,平均值,最小值
max_num = max(a)
min_num = min(a)
avg_num = sum(a)/len(a)
#python函数中,只能返回一个值
#如果非要返回多个值,会把返回的值封装为一个元组数据类型
return max_num,min_num,avg_num

variables = fun([34,1,2,3,4,5,6,7,421])
print(variables,type(variables))

如图:
在这里插入图片描述

函数形参:四大参数类型

参数:形参 实参
形参的分类:位置参数 默认参数 可变参数 关键字参数

位置参数:形参和实参必须保持一致

def getInfo(name, age): # 按照位置传递参数

print(name, age)

getInfo(age=18, name=‘name’)

默认参数:形参和实参可以不一致

def mypow(x,y=2):

“”"
求x的y次方
:param x:
:param y:
:return:
“”"
print(x**y)

mypow(4)
mypow(4,3)

可变参数

def mySum(*args):

“”"
需求:用户可以传递任意的值,计算数值的和
*args:是一个可变参数
args:是元组数据类型
:param args:
:return:
“”"
#print(args)
sum = 0
for item in args:
sum += item #元素之和
print(sum)

mySum(1,2,3,4,5,6,7,8)
nums = [1,2,3,4,5,6]
nums1 = (2,5,6,7,9,10)
nums2 ={1,2,3,4,5,6,7,8}
mySum(*nums2)

关键字参数

def getStuInfo(name,age,**kwargs):

print(name,age)
print(kwargs)

getStuInfo(‘westos’,11,hobbies=[‘code’,‘running’],gender=‘female’)

#带与不带的数值类型

score = (12,23,56,78,90)
minscore,*middlescore,maxscore = score
print(*middlescore)
print(middlescore)

如果要对字典进行解包,一个星号:获取key值

d = dict(a=1,b=2)
print(*d)
getStuInfo(‘westos’,11,**d)

函数的作用域

作用域:
局部作用域
全局作用域

全局作用域:作用于整个程序

局部作用域:在函数运行时生效,函数运行结束则释放

num = 10
print(‘out fun: id=’,id(num))
def fun():

#局部作用域,在函数运行时生效,函数运行结束则释放
num =2
print(‘in fun:id=’,id(num))
print(‘in fun:num = %s’ %(num))

fun()
print(‘out fun: num=%s’ %(num))

如图:
在这里插入图片描述

num = 10
def fun():

#通过global关键字声明局部变量为全局变量
#函数执行完毕,变量依然生效
global num
num = 2

fun()
print(num)

参数检测

def add(x, y):

if isinstance(x, (int, float)) and isinstance(y, (int, float)): # 判断参数x,y是否为int或float型

return x + y

else:

print(‘Error:’)

res = add(2.5,2)
print(res)

练习

1.函数练习1

*** 练习1:
编写一个名为collatz()的函数,它有一个名为number的参数。
如果参数是偶数,那么collatz()就打印出number//2
如果number是奇数,collatz()就打印3*number+1
“”"

def collatz(number):

if number % 2 == 0:

print(number//2)

else:

print(3*number+1)

#print(number//2 if number %2 ==0 else 3 * number +1) # if,else的组合写法

collatz(2)

结果展示:
在这里插入图片描述

2.return的应用

随机生成20个学生的成绩
判断这个20个学生的等级

import random
def get_level(score):

if 90 < score <= 100:

return ‘A’

elif 80 < score <= 90:

return ‘B’

else:

return ‘C’

def main():

for i in range(20):

score = random.randint(1,100)
print(‘成绩为%s,等级为%s’ %(score,get_level(score)))

main()

结果展示:
在这里插入图片描述

3. 函数练习-平方等式

题目需求:
对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
f(13) = 12 + 32 = 10
f(207) = 22 + 02 + 72 = 53
下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
且k*f(n)=n
输入:
第一行包含3个正整数k,a, b, k>=1, a,b<=10
18, a<=b;
输出:
输出对应的答案;
范例:
输入: 51 5000 10000
输出: 3

def f(n):

n=str(n)
sum=0
for i in n:

sum+=int(i)**2
return sum

def maa(k,a,b):

l=0
for n in range(a,b):

if k*f(n)==n:

l+=1

print(l)

maa(k=51,a=5000,b=10000)

结果展示:
在这里插入图片描述

4. 函数练习2

1.Collatz序列
编写一个名为collatz()的函数,它有一个名为number的参数。
如果参数是偶数,那么collatz()就打印出number//2,并返回
该值。如果number是奇数,collatz()就打印并返回3*number+1。
然后编写一个程序,让用户输入一个整数,并不断对这个数
调用collatz(),直到函数返回值1(令人惊奇的是,这个序列
对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学
家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,
它有时候被称为“最简单的、不可能的数学问题”)。

  • 输入:
    3

  • 输出:
    10
    5
    16
    8
    4
    2
    1

number=int(input(‘请输入整数:’))
def collatz(number):

global number
if number % 2 == 0:

return number//2

else:

return 3*number+1

def main():

global number
while number!=1:

collatz(number)

结果展示:
在这里插入图片描述

5. 函数练习3

编写函数,计算字符串匹配的准确率

def compare(offical,input):

if not(isinstance(offical,str) and isinstance(input,str)): #判断两个参数是否为字符串

print(‘输入的不是字符串,无法比较’)
return

if len(input)>len(offical):

print(‘字符串过长无法匹配’)
return

i=0 # 相同的个数
for offical_char,input_char in offical,input:

if offical_char == input_char:

i+=1

return i/len(offical)

a=‘have a nice day’
b=‘Have b aaaa day’
print(compare(a,b))

结果展示:
在这里插入图片描述

6. 可变参数练习

案例1:
编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.

def cacluate(*num):

average=sum(num)/len(num)
a=[]
for i in num:

if i > average:

a.append(i)
return average,a

结果展示:
在这里插入图片描述

**案例2:
编写一个函数, 接收字符串参数, 返回一个元组,‘ehllo WROLD’
元组的第一个值为大写字母的个数, 第二个值为小写字母个数.

def main(m):

l=0
u=0
for i in m:

if i.islower():

l+=1

elif i.isupper():

u+=1

return u,l

print(main(‘hello WoRLd omT’))

结果展示:
在这里插入图片描述

**案例3:
编写函数, 接收一个列表(包含30个整形数)和一个整形数k, 返回一个新列表.
函数需求:
- 将列对应(不包含k)表下标k之前的元素逆序;
- 将下标k之后的元素逆序;

def main(args,k):

m=args[k+1:]
re1=list(m[::-1])
l=len(args)
n=args[:-(l-k)]
re2=list(n[::-1])
return tuple(re2 + [args[k]] + re1)

结果展示:
在这里插入图片描述

7. 函数练习4

模拟轮盘抽奖游戏
轮盘分为三部分: 一等奖, 二等奖和三等奖;
轮盘转的时候是随机的,
-如果范围在[0,0.08)之间,代表一等奖,
-如果范围在[0.08,0.3)之间,代表2等奖,
-如果范围在[0, 1.0)之间,代表3等奖,
模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.
#第一种方法

def main():

import random
f = 0
s = 0
t = 0
for i in range(1000):

a=random.random()
if 0 <= a < 0.08:

f+=1

elif 0.08 <= a < 0.3:

s+=1

else:

t+=1

return {‘一等奖’: f,‘二等奖’: s,‘三等奖’: t}

print(main())

#第二种方法

import random
rewardDict = {
‘一等奖’: (0, 0.08),
‘二等奖’: (0.08, 0.3),
‘三等奖’: (0.3, 1),
}
def rewardFun():
“”“用户得奖等级”""
#生成一个0~1之间的随机数

number = random.random()
#判断随机转盘转的数是几等奖?
for k, v in rewardDict.items():
#这里的v是元组

if v[0] <= number < v[1]:

return k

#print(rewardFun())
resultDict = {}
for i in range(1000):

#res: 本次转盘的等级(一等/二等/三等)
res = rewardFun()
if res not in resultDict:

resultDict[res] = 1

else:

resultDict[res] = resultDict[res] + 1

for k, v in resultDict.items():

print(k, ‘---->’, v)

结果展示:
在这里插入图片描述

8.综合练习

学生管理系统, 分为管理员登陆和学生登陆;

管理员登陆, 可以操作:

管理员密码修改;
添加学生的信息;
删除学生的信息;
修改学生的信息;
查询学生的信息(根据学号);
查看所有学生的信息;
退出系统

学生登录:

查询个人信息;
修改信息;
    修改年龄;
    修改密码;

学生信息包括:

# 学号, 姓名, 性别, 班级, 出生年月, 用户名, 密码
# 学生用户名和学号保持一致;

管理员信息包括:

# 用户名, 密码

info_adm={
‘用户名’:‘admin’,
‘密码’:‘admin’
}

info_stu={
‘06143020’:{
‘姓名’:‘小明’,
‘学号’:‘06143020’,
‘性别’:‘男’,
‘出生年月’:‘97.2.26’,
‘用户名’:‘06143020’,
‘密码’:‘123456’
},
‘06143001’:{
‘姓名’:‘小李’,
‘学号’:‘06143001’,
‘性别’:‘男’,
‘出生年月’:‘98.2.26’,
‘用户名’:‘06143001’,
‘密码’:‘123456’
}
}

#函数1.管理员操作函数

def admin():

info="""
1.管理员密码修改;
2.添加学生的信息;
3.删除学生的信息;
4.修改学生的信息;
5.查询学生的信息(根据学号);
6.查看所有学生的信息;
q.退出系统;
“”"

while True:

print(info)
oper=input(‘请输入需要操作的序号:’)
if oper==‘1’:

info_adm[‘密码’]=input(‘请输入修改后的密码:’)

if oper==‘2’:

num=input(‘请输入需要添加信息的学生学号:’)
mess=input(‘请输入需要添加什么信息:’)
content=input(‘请输入需要添加的信息内容:’)
info_stu[num][mess]=content

if oper==‘3’:

num = input(‘请输入需要删除信息的学生学号:’)
mess = input(‘请输入需要删除什么信息:’)
info_stu.pop[num][mess]

if oper==‘4’:

num = input(‘请输入需要修改信息的学生学号:’)
mess = input(‘请输入需要修改什么信息:’)
content = input(‘请输入需要修改的信息内容:’)
info_stu[num][mess]=content

if oper==‘5’:

num = input(‘请输入需要查询的学生学号:’)
print(info_stu[num])

if oper==‘6’:

print(info_stu)

if oper==‘q’:

print(‘欢迎下次使用’)
quit()

#函数2.学省操作函数

def student(num):

info="""
1.查询个人信息;
2.修改信息;

#修改年龄;
#修改密码;

q.退出
“”"
while True:

print(info)
oper=input(‘请输入需要进行的操作:’)
if oper==‘1’:

print(info_stu[num])

if oper==‘2’:

mess = input(‘请输入需要修改什么信息:’)
content = input(‘请输入需要修改的信息内容:’)

if mess==‘密码’ or mess==‘年龄’:

info_stu[num][mess]=content

if oper==‘q’:

print(‘欢迎下次使用’)
quit()

#进行登录操作

i=0
while i<3:

name = input(‘请输入用户名:’)
passwd = input(‘请输入用户密码:’)
i+=1
if nameinfo_adm[‘用户名’] and passwdinfo_adm[‘密码’]:

admin()
break

elif name in info_stu:

if nameinfo_stu[name][‘用户名’] and passwdinfo_stu[name][‘密码’]:

student(name)
break

else:

print(‘密码输入错误,请重新输入’)

else:

print(‘密码输入错误,请重新输入’)

else:

print(‘三次机会已经用尽,请稍后再尝试’)

部分结果截图:
1.管理员操作
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.密码部分
在这里插入图片描述

3.学生查看自己部分

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值