函数初识(函数的返回值,三元运算,函数的传参)

函数的初识
def关键字 空格 函数名(命名要求与变量相同):
    函数体
    执行函数:函数名 ()
    函数是以功能为导向的。
     def login():
        pass
    def register():
        pass
函数的返回值:
 return: 1.函数中遇到renturn ,结束函数,下面的代码不执行。
            2.将函数的值返回给函数的调用者(执行者)
                第一种情况:
                    只有return,返回None
                第二种情况;
                    return None
                第三种情况:
                    return 单个值。返回值得类型与值的类型相同。
                第四种情况:
                    return 多个值,以元祖的形式返回给函数的调用者。
函数的参数。
  # 实参角度

    位置参数
        一一对应,实参形参数量相等
    关键字参数
        一一对应,实参形参数量相等,实参顺序可变
    混合参数 (位置参数,关键字参数)
        关键字参数必须在位置参数后面
    # 形参角度

    位置参数
         一一对应,实参形参数量相等
    默认参数
        默认参数必须放在形参的位置参数后面
        默认参数不传值则为默认值,传值则覆盖默认值。
    动态参数
            
什么是None?
所有的空集合,字典,列表,字符串...
'''
重复代码多,可读性差
函数的产生:
函数就是封装一个功能。
def my_len():
# def  关键字     定义一个函数
#my_len 函数名,书写规则和变量一样
# def与函数名中间一个空格
# 函数名(): 加上冒号
# 函数体
    l1 = (1, 2, 3, 4, 5, [3, 2, 1], 'alex', '小明', 'a', 'b')
    count=0
    for j in l1:
        count+=1
    print(count)
my_len()
函数执行:函数名+()
函数的返回值
写函数,不要在函数中写print()
return
1.在函数中,遇到return结束函数
2.将值返回给函数的调用者
    无return
    return None
    return 一个值,该值是什么,直接返回给函数的调用者,函数名()
    return 多个值,将多个值放在一个元阻里,返回函数的调用者。
def my_len():
    count=0
    l1 = (1, 2, 3, 4, 5, [3, 2, 1], '小强', '小明', 'a', 'b')
    for j in l1:
        count+=1
    return count
# ret=my_len()
# print(ret)
print(my_len())
print(len('15428517'))

def my_len(l):      #l形式参数,形参
    print(l)
    count=0
    for i in l:
        count+=1
        return count
a='kfjimirmvirv'
print(my_len(a))        #实际参数,实参
print(my_len([1,2,3]))
实参角度:
1.位置传参,按顺序,一一对应。
def func(a,b,c):
    print(a)
    print(b)
    print(c)
func('alex',[1,2,3],666)
写一个函数,功能是比较大小
def mix_min(a,b):
    if a>b:return a
    else:return b
a=int(input('请输入一个数:'))
b=int(input('请输入另一个数:'))
print(mix_min(a,b))

三元运算

def mix_min(a,b):
    # z=a if a>b else b
    # return z
    return a if a>b else b
a=int(input('请输入一个数:'))
b=int(input('请输入另一个数:'))
print(mix_min(a,b))
def mix_min(a,b) return a if a>b else b
关键字传参,不按顺序,一一对应。
def mix_min(a,b):
    return a if a>b else b
print(mix_min(b=200,a=105))
混合传参,关键字传参永远在最后面
def func1(a,b,c,d,e):
    print(a)
    print(b)
    print(c)
    print(d)
    print(e)
func1(1,2,d=8,c=6,e=9)
func1(1,d=5,c=8,9,3) #报错
按照形参角度:
# 1.位置传参,按位置,一一对应
def func(a,b,c):
    print(a)
    print(b)
    print(c)
func('hh',666,'上善若水')
# 2.默认参数:传参则覆盖,不传参则默认,默认参数永远在位置参数后面
def func(a,b=666):
    print(a,b)
func(456)
func(123,888)
s='小强'.center(30,'*')
print(s)
HR录入名单
def Infor_entry(username,sex=''):
    with open('name_list',encoding='utf-8',mode='a')as f1:
        f1.write('{}\t{}\n'.format(username,sex))
while True:
    username=input('请输入姓名(男生以1开头):').strip()
    if '1'in username:
        username=username[1:]
        Infor_entry(username)
    else:
        Infor_entry(username,'')
模拟len()函数
初期
# 重复代码多,可读性差
def
my_len(): l=[1,2,3,4,5,6,7] count = 0 for i in l: count+=1 print(count) my_len()
升级
def my_len(a):#a 形式参数,也可以是b,c 等等,用于接收实参
    count = 0
    for i in a:
        count+=1
    return count

l=[1,2,3,4,5,6,7]
my_len(l)#l,s 都是实参,实际存在的
print(my_len(l))
s='forjoivomv,vpoeqkg'
my_len(s)
print(my_len(s))

def tes(a, b, c):
    print(111)
    print(a, b, c)

tes(22, 'zdd', [11, 22, 33])#一一对应,实参形参数量相等

def func(x, y,):
    print(x, y)

func(y=3333, x=4)#一一对应,实参形参数量相等,实参顺序可变

def func1(x, y, z):
    print(x, y, z)

func1(111, 222, z=555)  # 混合传参 位置参数必须再前面
func1(111, y=555, 222)  # 报错


def func2(y, x):
    print(x, y)
func2(1, 2)

def func2(y, x, z=100):
    print(x, y, z)
func2(1, 2, 3000)

def max(a,b):
     if a>b :
         return a
     else:
         return b

print(max(1,2))
三元运算
'''
def max(a,b):
    c=a if a>b else b
    return c
print(max(33,678),type(max(5,6)))#678 <class 'int'>

def max(a,b):
    return  a if a>b else b
print(max(455,298))

def max (a,b):return a if a>b else b
'''
实参角度
位置参数
一一对应,实参形参数量相等

关键字参数
一一对应,实参形参数量相等,实参顺序可变

混合参数(位置参数,关键字参数)
关键字参数必须在位置参数后面

# 形参角度

位置参数
一一对应,实参形参数量相等

默认参数
默认参数必须放在形参的位置参数后面
默认参数不传值则为默认值,传值则覆盖默认值。
动态参数

def input_information(name,sex=''):?
    with open ('information',encoding='utf-8',mode='a') as f1:
        f1.write('{}\t{}\n'.format(name,sex))
while True:
    msg=input('请输入用户的姓名,性别\Q或者q退出').strip()
    if msg.upper()=='Q':break
    if ','in msg:
        name1,sex1=msg.split(',')
        input_information(name1,sex1)
    else:
        input_information(msg)
写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,
并将其作为新列表返回给调用者。
def odd_number(a):
    list=[]
    for i in range(len(a)):
        if i % 2==1:
            list.append(a[i])
    return list

l1=[1,2,3,4,5,6,7,8,9,10]
print(odd_number(l1))
set=(1,2,3,4,5,6,7,8,9,10)
print(odd_number(set))

def func2(argv): return argv[1::2]# 切片的妙用
l1=[1,2,3,4,5,6,7,8,9,10]
print(func2(l1))
升级:两个列表合并一起测
def func2(*args): return args[1::2]#*在函数定义时是聚合
l1=[1,2,3,4,5,6,7,8,9,10]
l2=[11,12,13,14,15,16]
print(func2(*l1,*l2))#*在函数调用时是打散
写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
def my_len(a):
    count=0
    for i in a:
        count+=1
    if count>5:
        return True
    else:
        return False
s='bihtjjj'
print(my_len(s))
l=[1,'xiaoqiang',333,666,888,'您好']
print(my_len(l))
set=(1,333,666,888)
print(my_len(set))

def func3(argv): return True if len(argv) > 5 else False# 三元运算,简单的判断可用
s='jfjklhuggu'
print(func3(s))
写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,
并将新内容返回给调用者。
def lenth(a):
    list = []
    count=0
    for i in a:
        count+=1
    if count>2:
        return a[:2]
    else:
        return a
l=[1,2,3,4]
print(lenth(l))

def func4(argv):return argv[:2]#巧用切片,不到指定长度也不报错。
l=[1,2,3,4]
print(func4(l))
写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数,并返回结果。
figure, abc, blank, other = 0, 0, 0, 0 #当变量是可迭代时,可以不用global,内部也能使用。
def num(a):
    global figure, abc, blank, other#global,声明一个全局变量。把全局变量变成局部变量。
    #也可以不用global,直接把figure, abc, blank, other = 0, 0, 0, 0 放到函数里面使用。
    for i in a:
        if i.isdigit():
            figure+=1
        elif i.isalpha():
            abc+= 1
        # elif i==' ':
        #     blank += 1
        elif i.isspace():#也可以是 elif i==' ':
            blank += 1              #blank += 1
        else:
            other+=1
    result= '该字符串中数字有{}个,字母{}个,空格{}个,其他{}个'\
            .format(figure,abc,blank,other)
    return result
s='jkjfF 46CD44*  $'
print(num(s))
写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,
并返回结果。
def empty_content(a):
    for i in a:
        if i==' ':
            return True

s='hufhicdw jkjjo'
print(empty_content(s))
写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,
并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表
def func7(argv):
    for i in argv:
        argv[i] = argv[i][:2]#切片 一定要多加练习
    return argv
dic = {"k1": "v1v1", "k2": [11, 22, 33, 44]}
print(func7(dic))
写函数,接收两个数字参数,返回比较大的那个数字。
def max(x,y): return x if x>y else y
print(max(466,123))
写函数,用户传入修改的文件名,与要修改的内容,执行函数,
完成整个文件的批量修改操作(进阶)。
import os   #引入的模块尽量放到外面
def func(path,old_content,new_content): #函数可以把题目写活
    
    with open(path,encoding='utf-8') as f1,\
         open(path+'bak',encoding='utf-8',mode='w')as f2:
        for line in f1:
            new_line=line.strip().replace(old_content,new_content)
            f2.write('%s\n' % new_line) #%s\n的话,第一行会空着,没有内容。
    os.remove(path)
    os.rename(path+'bak',path)
func('modification','xiaohua','NB')
写一个函数完成三次登陆功能,再写一个函数完成注册功能(进阶)
def login():
    i=1
    while i<4:
        username =input('请输入你的账号:Q或者q退出').strip()
        password =input('请输入你的密码:Q或者q退出').strip()
        if username.upper()=='Q'or password.upper()=='Q':
            break
        elif username =='zhangsan'and password =='123':
            print('恭喜你登录成功')
            break
        else:
            print('你的账号或者密码错误,请重新登录,还剩余%d次机会' % (3-i))

        i+=1
login()
def regisster(): flag=True while flag: username = input('请输入你的账号:Q或者q退出').strip() password =input('请输入你的密码:Q或者q退出').strip() if username.upper()=='Q'or password.upper()=='Q': # global flag flag=False else: dic={'name':'zhangsan','pass':'123'} if username not in dic['name']: print('您还没有账号,请注册') username = input('请输入你的账号:Q或者q退出').strip() password = input('请输入你的密码:Q或者q退出').strip() if username.upper() == 'Q' or password.upper() == 'Q': # global flag flag = False else: dic = {'name': 'zhangsan', 'pass': '123'} if username not in dic['name']: password1 = input('请再次输入你的密码:Q或者q退出').strip() if password==password1: print('恭喜你登录成功') else: print('您两次输入的密码不一致,请重新输入').strip() else: print('您输入的账号已经存在,请重新注册') username = input('请输入你的账号:Q或者q退出').strip() password = input('请输入你的密码:Q或者q退出').strip() regisster()

def regisster():
    flag=True
    while flag:
        username = input('请输入你的账号:Q或者q退出').strip()
        password =input('请输入你的密码:Q或者q退出').strip()
        if username.upper()=='Q'or password.upper()=='Q':
            # global flag
            flag=False
        else:
            with open('register',encoding='utf-8') as f1:
                for line in f1:
                    line=line.split()
                if username not in line[0]:
                    print('您还没有账号,请注册')
                    username = input('请输入你的账号:Q或者q退出').strip()
                    password = input('请输入你的密码:Q或者q退出').strip()
                    if username.upper() == 'Q' or password.upper() == 'Q':
                        flag = False
                    else:
                        if username not in  line[0]:
                            password1 = input('请再次输入你的密码:Q或者q退出').strip()
                            if password==password1:
                                print('恭喜你登录成功')
                                with open ('register',encoding='utf-8',mode='a') as f1:
                                    f1.write('\n'+  username +  password)
                            else:
                                print('您两次输入的密码不一致,请重新输入').strip()
                        else:
                            print('您输入的账号已经存在,请重新注册')
                            username = input('请输入你的账号:Q或者q退出').strip()
                            password = input('请输入你的密码:Q或者q退出').strip()
regisster()

def register():
    while True:
        dic={{'username':'zhangsan','password':'123'},}
        username = input('请输入你的账号:Q或者q退出').strip()
        password =input('请输入你的密码:Q或者q退出').strip()
        if username not in dic['username']:
            print('您输入的用户不存在,请完成登录')
            username = input('请输入你的账号:Q或者q退出').strip()
            password1 = input('请输入你的密码:Q或者q退出').strip()
            if username == dic['username']:
                print('用户名已经存在,请重新登录')
            else:
                password2 = input('请再次确认密码:Q或者q退出').strip()
                if password1==password2 :
                    print('恭喜你注册成功')
                else:
                    password2 = input('您两次输入密码不一致,请再次确认密码:Q或者q退出').strip()


def login_3():
    dic = {'name': ['小狗'], 'password': ['123']}
    flag=True
    while flag:
        choice=input('登录请输入L\l;注册请输入R\r').strip()
        if choice.upper()=='L':
            i=0
            while i<3:
                username=input('请输入用户名:').strip()
                password=input('请输入密码:').strip()
                if username  in dic['name'] and password in dic['password']:
                    print( '登录成功')
                    i=5
                    flag=False
                else:
                    print( '用户名或者密码有误,您还有%s次登录机会' % (2-i))
                    if i==2:
                        flag = False

                i += 1

        elif choice.upper()=='R':
            new_username=input('请输入要注册的用户名:').strip()
            new_password=input('请输入注册密码:').strip()
            dic['name'].append(new_username)
            dic['password'].append(new_password)
            print('注册成功')


# print(login_3())
login_3()


posted @ 2018-05-19 23:44  老虎死了还有狼  阅读(457)  评论(0编辑  收藏  举报