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("登录失败"

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 == "":
user = input("请输入用户名")
pwd = input("请输入密码")
if login(user,pwd):
print("登录成功")
else:
print("登录失败")
elif inp == "":
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()

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)

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)

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()

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)

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

PYDay7&8-递归、冒泡算法、装饰器的更多相关文章

  1. 第四天 内置函数2 随机码 装饰器 迭代器、生成器 递归 冒泡算法 JSON

    关于函数的return li = [11,22,33,44] def f1(arg): arg.append(55) li = f1(li) print(li) 因为li = f1(li) 实际赋值的 ...

  2. day14带参装饰器,迭代器,可迭代对象 , 迭代器对象 ,for迭代器 , 枚举对象

    复习 ''' 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.验证执行 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 装饰 ...

  3. Python 函数装饰器

    首次接触到装饰器的概念,太菜啦! Python 装饰器可以大大节省代码的编写量,提升代码的重复使用率.函数装饰器其本质也是一个函数,我们可以把它理解为函数中定义了一个子函数. 例如我们有这么一个需求, ...

  4. Python系列之文件操作、冒泡算法、装饰器、及递归

    文件处理 python对文件进行读写操作的方法与具体步骤,包括打开文件.读取内容.写入文件.文件中的内容定位.及关闭文件释放资源等 open().file(),这个两函数提供了初始化输入\输出(I\O ...

  5. python之路递归、冒泡算法、装饰器

    map使用 完整用户名登录,注册 冒泡排序 递归 def func(arg1,arg2): if arg1 == 0: print arg1, arg2 arg3 = arg1 + arg2 prin ...

  6. python学习笔记之装饰器、递归、算法(第四天)

    参考老师的博客: 金角:http://www.cnblogs.com/alex3714/articles/5161349.html 银角:http://www.cnblogs.com/wupeiqi/ ...

  7. python-Day4-迭代器-yield异步处理--装饰器--斐波那契--递归--二分算法--二维数组旋转90度--正则表达式

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

  8. Python学习笔记——基础篇【第四周】——迭代器&生成器、装饰器、递归、算法、正则表达式

    目录 1.迭代器&生成器 2.装饰器 a.基本装饰器 b.多参数装饰器 3.递归 4.算法基础:二分查找.二维数组转换 5.正则表达式 6.常用模块学习 #作业:计算器开发 a.实现加减成熟及 ...

  9. Python学习(三):迭代器、生成器、装饰器、递归、算法、正则

    1.迭代器 迭代器是访问集合的一种方式,迭代对象从集合的第一个元素开始访问,直到元素被访问结束,迭代器只能往前不能后退,最大的优点是不要求事先准备好整个迭代过程中的元素,这个特点使得它特别适合用于遍历 ...

随机推荐

  1. C/C++程序员应聘常见面试题深入剖析(2)

    摘自:http://blog.csdn.net/zhoudengqing 3.内功题 试题1:分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var) 解答: ...

  2. matlab实现gabor滤波器的几种方式

    转自:http://blog.csdn.net/watkinsong/article/details/7882443 方式一: function result = gaborKernel2d( lam ...

  3. MD5加密的方法

    #region MD5加密 /// <summary> /// MD5加密 /// </summary> /// <param name="strPwd&quo ...

  4. dbf 工程模式连接(vfp c# )

    首先现在微软官网下载“Microsoft OLE DB Provider for Visual FoxPro 9.0”驱动 下载完成后得到“VFPOLEDBSetup.msi” 双击安装即可在“C:\ ...

  5. js实现接口的几种方式

    Javascript模仿接口可以有三种方式:1.注释法 2.检查属性法 3.鸭式辨形法 1.注释法:此方法属于程序文档范畴,对接口的继承实现完全依靠程序员自觉 /* interface People{ ...

  6. JS字符串处理方法

    1.字符方法charAt()和charCodeAt();这两个方法都接收一个参数例:<script>var stringValue = "hello world"; s ...

  7. Fragment(一)--Fragment用法常见问题

    fragment notes fragment相关内容包括 基本定义与使用 回退栈内部实现 fragment通信(与activity 与fragment) DialogFragment VP + Fr ...

  8. 【读书笔记】构建之法(CH4~CH6)

    从chapter4至chapter6,围绕着构建过程的合作讨论构建之法,而合作与个人工作的区别却以一个微妙的问题为开端:阅读别人的代码有多难? 两人合作:(驾驶员与领航员) 合作要注意代码风格规范与设 ...

  9. LR中测试dubbo接口的脚本

    import lrapi.lr;import com.alibaba.dubbo.config.ApplicationConfig;import com.alibaba.dubbo.config.Re ...

  10. C# for循环的嵌套 作用域

    for() {   循环体可以套无数个for循环 } 比如:for() { for() { for() {... ...这里面可以镶嵌无数个for循环} } } 也可以这样 for() { for() ...