python--函数

###########函数############

#函数的定义

def关键字,依次写出函数名、括号、括号中的参数和冒号 :

在缩进块中编写函数体,函数的返回值用 return 语句返回。

name为该函数的参数

def 函数名(name):
    pass (函数体)
    return 返回值

定义一个什么事也不做的空函数,可以用 pass 语句;

pass 可以用来作为占位符,还没想好怎么写函数的代码,
就可以先放一个 pass ,让代码能运行起来

def fun():
    pass
fun()
print('abc')

#函数的调用

定义函数不会执行里边的内容

def hello():
    print('hello')
hello()               #函数的调用

#函数的嵌套

def fentiao():
    print("is fentiao.....")
    def cooffee():             
        print("cooffee")
    cooffee()                     #函数嵌套定义函数时,要将定义的函数调用,否则不会执行
fentiao()

#形参与实参

def welcome(name):           #name为形参,定义函数时的变量
    print("welcom  "+name)
welcome('cooffee')           #cooffee,floatong为实参,真实的数据信息,调用函数时传的参数
welcome('floating')
def fun():
    print(fun.x)
fun.x=3                    #动态添加
fun()
# del fun.x                ##动态删除
# fun()

#形参的分类

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

def getInfo(name,age):          #按照位置传参数
    print(name,age)
getInfo(12,'name')
getInfo(age=18,name='cooffee')

默认参数

有多个参数时,变化大放前面,变化小的放后面;
必选参数在前,默认参数在后

def mypow(x,y=2):            #默认参数y
    '''
    求x的y次方,y默认值为2
    :param x:
    :param y:
    '''
    print(x**y)
mypow(4)
mypow(4,3)

可变参数

可变参数就是传入的参数个数是可变的,可以是 1 个、2 个
到任意个,还可以是 0 个。*args

def mySum(*args):
    '''
    用户可以输入任意个数值,计算数值的和
    注意: *args是可变参数
          args是元组数据类型
    :param args:
    :return:
    '''
    sum = 0
    for item in args:
        sum += item
    print(sum)
mySum(1, 2, 3, 4)

关键字参数

关键字参数允许你传入 0 个或任意个含参数名的参数;
这些关键字参数在函数内部自动组装为一个 dict;
关键字参数用**kwargs

def getStuInfo(name,age,**kwargs):               ##*kwargs关键字参数
    '''
    **kwargs是一个字典;可以传递任意多的key-value对
    :param name:
    :param age:
    :param kwargs:
    :return:
    '''
    print(name,age)
    print(kwargs)
getStuInfo("westos",19,hobbies=['code','running'],gender='female')

#参数解包

score=(12,23,45,67,78,89)
minScore,*middleScore,maxScore  = score      #*middleScore将中间的数据装起来
print(minScore,middleScore,maxScore)         #没有解包
print(minScore,*middleScore,maxScore)        #解包

对list  tuple   set解包时,只需要在变量前加*

nums = [1,3,4,6,23,56]
nums1= (1,3,4,6,23,56)
nums2={1,3,4,6,23,56}
print(*nums)
print(*nums1)
print(*nums2)

对字典解包:一个星号是获取所有的key值

d=dict(a=1,b=2)
print(*d)

 # 参数数据类型的判断

isinstance(参数,类型)

isinstance(1, int)
Out[4]: True
isinstance(1.0, int)
Out[5]: False
isinstance(1, (int, float))
Out[6]: True
isinstance(True, (int, float))
Out[7]: True
isinstance([1,2,3], (int, float))
Out[8]: False

 

#参数的组合

参数组合是指可以必选参数、 默认参数、 可变参数和关键
字参数一起使用。
参数定义的顺序必须是:必选参数、 默认参数、可变参数和
关键字参数。

#函数的返回值:函数运算的结果,还需要进一步操作时,给一个返回值;

return用来返回函数执行结果的,如果没有返回,默认为None;

一旦遇到return,函数执行结束,后面的代码不会执行,(yield)

若return后有多个参数时,返回的数据类型为元组

def mypowandsum(x,y=2):
    '''
    求x的y次方,以及x与y的和,y的默认值为2
    :param x: 
    :param y: 
    :return: 
    '''
    return x**y,x+y
print(mypowandsum(5))

#全局变量与局部变量

局部变量:在函数内部定义的普通变量,只在函数内部起作用,函数执行结束,变量会自动删除

                   可变:函数内部改变会影响外部变量的值

                   不可变:函数内部改变不会影响外部变量的值

全局变量:在整个程序中使用的变量
global关键字:强制将局部变量转换为全局变量

a=1                      #全局变量
print("outside:",id(a))
def fun():
    a=5                  #局部变量
    print("inside",id(a))
fun()
print(a)

a=1
print("outside:",id(a))
def fun():
    global a
    a=5
    print("inside",id(a))
fun()
print(a,id(a))

 

 

 

############小测试############

1.后台管理员只有一个用户: admin, 密码: admin
当管理员登陆成功后, 可以管理前台会员信息.
会员信息管理包含:
添加会员信息
删除会员信息
查看会员信息
退出

def Useradd():
    '''
    添加会员信息
    :return:
    '''
    print("添加会员信息".center(50, '*'))
    addUser = input("添加会员名:")
    if addUser in userinfo:
        print("用户%s已经存在" % (addUser))
    else:
        li=['name','age','passwd']
        userdir=dict()
        for i in li:
            msg=input("请输入%s:" %(i))
            userdir.setdefault(i,msg)
        userinfo.setdefault(addUser,userdir)
        print("添加用户%s成功" % (addUser))

def Userdel():
    '''
    删除会员信息
    :return:
    '''
    print("删除会员信息".center(50, '*'))
    delUser = input("删除会员名:")
    if delUser in userinfo:
        userinfo.pop(delUser)
        print("删除会员%s成功!" % (delUser))
    else:
        print("%s用户不存在" %(delUser))
def Userlook():
    '''
    会员信息查看
    :return:
    '''
    print("查看会员信息".center(50, '*'))
    # print("\t用户名\t密码")
    # userCount = len(users)  # 2
    # # 0,1
    # for i in range(userCount):
    #     print('\t%s\t%s' % (users[i], passwds[i]))
    userlook=input("请输入用户名:")
    if userlook in userinfo:
        for k,v in userinfo[userlook].items():
            print(k+':'+v)
    else:
        print("%s用户不存在" %(userlook))

print("管理员登陆".center(50, '*'))
inuser = input('UserName:')
inpasswd = input('Password:')
userinfo={
    'cooffee':{
        'name':'cooffee',
        'age':'18',
        'passwd':'cooffee',
    },
    'floating':{
        'name':'floating',
        'age':'18',
        'passwd':'floating'
    },
}

if inuser == 'admin' and inpasswd == 'admin':
    print("管理员登陆成功!")
    print("会员管理".center(50, '*'))
    while True:
        print("""
                        操作目录

           1 -    添加会员信息
           2 -    删除会员信息
           3 -    查看会员信息
           4 -    退出
        """)
        choice = input("请选择你的操作:")
        if choice == '1':
           Useradd()
        elif choice == '2':
            Userdel()
        elif choice == '3':
            Userlook()
        elif choice == '4':
            exit()
        else:
            print("请输入正确的选择")
else:
    print("管理员登陆失败!")

2.打地老鼠游戏

编写代码模拟打地鼠的小游戏,

假设一共有5个洞口,老鼠在里面随机一个洞口;

人随机打开一个洞口,如果有老鼠,代表抓到了,

如果没有,继续打地鼠;但是地鼠会跳到其它洞口

import random
mosedirt = {
        '1': 'None',
        '2': 'None',
        '3': 'None',
        '4': 'None',
        '5': 'None',
    }
def mouseIn():
    number=str(random.randint(1,5))
    mosedirt.update({number:'Yes'})
    return mosedirt
trycount=0
print("老鼠可能出现的洞口号有1,2,3,4,5")
while trycount<5:
    trycount+=1
    number1=input("请你输入老鼠所在的洞口号:")
    if number1 in ['1','2','3','4','5']:
        mouseIn()
        if mosedirt[number1]=='Yes':
            print("恭喜你抓到老鼠了!")
            mosedirt.update({number1:'None'})
        else:
            print("老鼠不在%s号洞口!" %(number1))
            mosedirt.update({number1:'None'})
    else:
        print("不存在%s号洞口" %(number1))

else:
    print("游戏结束!")

3.打字软件正确率

编写函数,计算字符串匹配的准确率。(类似于打字软件)

orginStr为原始内容,userStr为用户输入内容

def worldright(str1, str2):
    '''
    str1为原始内容,str2为用户输入内容
    :param str1:
    :param str2:
    :return:
    '''
    count = 0
    for i in range(len(str1)-1):
        if str1[i] == str2[i]:
            count += 1
    return (count / float(len(str1))) * 100
print("%.2f%%" %(worldright('orginStr', 'userStr')))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值