PYDay7&8-递归、冒泡算法、装饰器

 1、登录验证代码

1.1纯登录验证-函数实现

def login(username,password):
    '''
    用于用户名密码的验证
    :param username: 用户名
    :param password: 密码
    :return: Ture 用户验证成功False用户验证失败
    '''
    f = open("db",'r',encoding="utf-8")
    for line in f:
        line = line.strip() ##即可去掉空格,也可去除换行符,也可加参数去掉指定的字符
        line_list = line.split("$")
        if username == line_list[0]  and password == line_list[1]:
            return True
            break
    f.close()
    return  False


user = input("请输入用户名")
pwd = input("请输入密码")

if login(user,pwd):
    print("登录成功")
else:
    print("登录失败"
View Code

 1.2登陆、注册--函数实现

#!/usr/bin/env python
# -*- coding:utf-8 -*-
def login(username,password):
    '''
    用于用户名密码的验证
    :param username: 用户名
    :param password: 密码
    :return: Ture 用户验证成功False用户验证失败
    '''
    f = open("db",'r',encoding="utf-8")
    for line in f:
        line = line.strip() ##即可去掉空格,也可去除换行符,也可加参数去掉指定的字符
        line_list = line.split("$")
        if username == line_list[0]  and password == line_list[1]:
            return True
            break
    f.close()
    return  False

def register(username,password):
    '''
    注册用户
    1、打开文件a
    2、用户名&密码
    :param usernmae:用户名
    :param password: 密码
    :return: True创建成功 False 注册失败
    '''
    try:
        with open("db","a",encoding="utf-8") as f:
            temp = "\n" + username + "$" + password
            f.write(temp)
            return True
    except:
        return False

def user_exist(username):
    '''
    检查用户名是否存在
    :param username:需要检查的用户名
    :return: True 存在  false 不存在
    '''
    #一行一行查找
    with open("db",'r',encoding="utf-8") as f:
        for line in f:
            line = line.strip()
            line_list = line.split("$")
            if line_list[0] == username:
                return  True
    return False
def main():
    print("欢迎登录xxx系统")
    while True:
        inp = input("1:登录,2:注册,其他:退出。")
        if inp == "1":
            user = input("请输入用户名")
            pwd = input("请输入密码")
            if login(user,pwd):
                print("登录成功")
            else:
                print("登录失败")
        elif inp == "2":
            user = input("请输入用户名")
            pwd = input("请输入密码")
            is_exsit = user_exist(user)
            if is_exsit:
                print("用户已存在")
            else:
                result = register(user,pwd)
                if result:
                    print("注册成功")
                else:
                    print("注册失败")
        else:
            break
    print("系统退出")
main()
View Code

 2、冒泡算法

原理:每次找序列最大的

print(li)
for j in range(1,len(li)):
    for i in range(len(li) - j):
        # current = li[i]
        # next_value = li[i+1]
        # print(i,current,next_value)
        if li[i] > li[i+1]:
            temp = li[i]
            li[i] = li[i+1]
            li[i+1] = temp
print(li)
View Code

 3、递归

  循环调用直至达到跳出条件后将执行结果逐级传递回来。

def f5(depth,a1,a2):

    if depth == 10:
        return a1
    a3 = a1 + a2
    r = f5(depth+1,a2,a3)
    return r
ret = f5(1,0,1)
print(ret)
View Code

 4、装饰器

  使用原因:满足编程“对函数内部封闭,函数外部开发”的原则

  适用范围:对函数、方法、类生效,可在其执行前或执行后做一些其他的操作

  工作原理:执行outer函数,将其下的函数名当做参数。将outer的返回值重新复制给f1。其本质是,将原函数封装到新函数并执行新函数

def outer(func):
    def inner():
        print("Hello world!")
        print("Hello world!")
        print("Hello world!")
        r = func()
        print("End")
        print("End")
        print("End")
        return r
    return inner
@outer
def f1():
    print("F1")
    return "OOO"

f1()
View Code

4.1 一个装饰器可装饰多个函数

4.2 多个装饰器和装饰一个函数

5、作业:

5.1、写一个登录、注册、删除、修改密码的程序

5.2、写函数,利用递归获取斐波那契数列中的第 10 个数,并将该值返回给调用者。

#斐波那契数列:
#  0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368
def f5(depth,a1,a2):

    if depth == 10:
        return a1
    a3 = a1 + a2
    r = f5(depth+1,a2,a3)
    return r
ret = f5(1,0,1)
print(ret)
View Code

5.3、单层装饰器、多层装饰器的工作原理?

posted @ 2017-02-01 11:41  john221100  阅读(246)  评论(0编辑  收藏  举报