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("登录失败"
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-递归、冒泡算法、装饰器的更多相关文章
- 第四天 内置函数2 随机码 装饰器 迭代器、生成器 递归 冒泡算法 JSON
关于函数的return li = [11,22,33,44] def f1(arg): arg.append(55) li = f1(li) print(li) 因为li = f1(li) 实际赋值的 ...
- day14带参装饰器,迭代器,可迭代对象 , 迭代器对象 ,for迭代器 , 枚举对象
复习 ''' 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.验证执行 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 装饰 ...
- Python 函数装饰器
首次接触到装饰器的概念,太菜啦! Python 装饰器可以大大节省代码的编写量,提升代码的重复使用率.函数装饰器其本质也是一个函数,我们可以把它理解为函数中定义了一个子函数. 例如我们有这么一个需求, ...
- Python系列之文件操作、冒泡算法、装饰器、及递归
文件处理 python对文件进行读写操作的方法与具体步骤,包括打开文件.读取内容.写入文件.文件中的内容定位.及关闭文件释放资源等 open().file(),这个两函数提供了初始化输入\输出(I\O ...
- python之路递归、冒泡算法、装饰器
map使用 完整用户名登录,注册 冒泡排序 递归 def func(arg1,arg2): if arg1 == 0: print arg1, arg2 arg3 = arg1 + arg2 prin ...
- python学习笔记之装饰器、递归、算法(第四天)
参考老师的博客: 金角:http://www.cnblogs.com/alex3714/articles/5161349.html 银角:http://www.cnblogs.com/wupeiqi/ ...
- python-Day4-迭代器-yield异步处理--装饰器--斐波那契--递归--二分算法--二维数组旋转90度--正则表达式
本节大纲 迭代器&生成器 装饰器 基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...
- Python学习笔记——基础篇【第四周】——迭代器&生成器、装饰器、递归、算法、正则表达式
目录 1.迭代器&生成器 2.装饰器 a.基本装饰器 b.多参数装饰器 3.递归 4.算法基础:二分查找.二维数组转换 5.正则表达式 6.常用模块学习 #作业:计算器开发 a.实现加减成熟及 ...
- Python学习(三):迭代器、生成器、装饰器、递归、算法、正则
1.迭代器 迭代器是访问集合的一种方式,迭代对象从集合的第一个元素开始访问,直到元素被访问结束,迭代器只能往前不能后退,最大的优点是不要求事先准备好整个迭代过程中的元素,这个特点使得它特别适合用于遍历 ...
随机推荐
- python学习之调试:
编写的代码不会都能完好运行,所以需要调试,解决错误和异常,常有几种方法: 1 通过printf()来打印信息.但在发布时无法删除: 2 通过assert 条件表达式,‘提示信息’:启动解释器时通过 - ...
- atomic用法
memory order 源码变成可执行程序,一般由预编译,编译,汇编,链接.源码重排序一般分为编译期重排序和运行期重排序. 编译期重排序:编译器在不改变单线程程序的语义的前提下,可以重新安排语句的执 ...
- ZOJ Seven-Segment Display 暴力dfs + 剪枝
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3954 0 = on 1 = off A seven segment ...
- SVN状态图标消失的解决方法
有些时候我们会发现我们的SVN状态图标会突然消失,所有的文件夹都变成了普通的文件夹格式,这点很不利于我们进行管理. 进入任意一个文件夹,鼠标右键,依次进入TortoiseSVN---Settings ...
- cookie和session基础以及在Django中应用
看了会视频,终于搞懂了~ 1.cookie cookie:保存状态 cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地:当浏览器再次访问时,浏览器会自动带上cookie,这样服务器 ...
- Linux中grep、sed、awk使用介绍
linux文件操作命令介绍1)grepgrep 用于在文件中查找符合条件的记录grep 参数 过滤条件 文件过滤的条件中可使用正则表达式-c 显示符合的行数-i 忽略大小写-n 显示符合要求的记录,包 ...
- vijos 1164 曹冲养猪
描述 自从曹冲搞定了大象以后,曹操就开始捉摸让儿子干些事业,于是派他到中原养猪场养猪,可是曹冲满不高兴,于是在工作中马马虎虎,有一次曹操想知道母猪的数量,于是曹冲想狠狠耍曹操一把.举个例子,假如有16 ...
- 人人必知的10个 jQuery 小技巧
原文地址:http://info.9iphp.com/10-jquery-tips-everyone-should-know/ 人人必知的10个 jQuery 小技巧 收集的10个 jQuery ...
- 导致实例逐出的五大问题 (文档 ID 1526186.1)
适用于: Oracle Database - Enterprise Edition - 版本 10.2.0.1 到 11.2.0.3 [发行版 10.2 到 11.2]本文档所含信息适用于所有平台 用 ...
- UVA 11374 Airport Express (最短路)
题目只有一条路径会发生改变. 常见的思路,预处理出S和T的两个单源最短路,然后枚举商业线,商业线两端一定是选择到s和t的最短路. 路径输出可以在求最短路的同时保存pa数组得到一棵最短路树,也可以用di ...