zoukankan      html  css  js  c++  java
  • 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 = "
    " + 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、单层装饰器、多层装饰器的工作原理?

  • 相关阅读:
    tflearn alexnet iter 10
    自然语言处理中的Attention Model:是什么及为什么
    深度学习的seq2seq模型——本质是LSTM,训练过程是使得所有样本的p(y1,...,yT‘|x1,...,xT)概率之和最大
    java 提取主域名
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(11月14日~11月20日)
    2个月女婴注射疫苗后死亡?启示!!
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(11月9日~11月13日)
    北京Uber优步司机奖励政策(11月16日~11月22日)
    【独家:震惊!——西城区所有学区优质度透解与大排名,泄密了!】
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(10月31日~11月6日)
  • 原文地址:https://www.cnblogs.com/workherd/p/6359798.html
Copyright © 2011-2022 走看看