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.迭代器 迭代器是访问集合的一种方式,迭代对象从集合的第一个元素开始访问,直到元素被访问结束,迭代器只能往前不能后退,最大的优点是不要求事先准备好整个迭代过程中的元素,这个特点使得它特别适合用于遍历 ...
随机推荐
- Spark Mllib里如何将trainDara训练数据的分类特征字段转换为数值字段(图文详解)
不多说,直接上干货! 字段3 是分类特征字段,但是呢,在分类算法里不能直接用.所以,必须要转换为数值字段才能够被分类算法使用. 具体,见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的 ...
- 如何写一个跨浏览器的事件处理程序 js
如何 写一个合格的事件处理程序,看如下代码: EventUtil可以直接拿去用 不谢 <!DOCTYPE html> <html> <head> <title ...
- node+express第一次实战踩坑记录
读万卷书不如行万里路,必须实践出真理! 问题1:项目结构该搭建成什么样? 我一个node.js小白,完全没有想法!再见! 找找别人的项目看看别人放的什么项目结构,再结合自己的项目需求我来想想!
- CF1079C Playing Piano
思路: dp. 实现: #include <bits/stdc++.h> using namespace std; ], dp[][]; int main() { int n; while ...
- 源文件名长度大于系统支持的长度,无法删除,java主方法执行方式删除
import java.io.File; /** * @author 海盗船长 * 2017年2月14日11:24:26 */ public class DeleteFiles { public st ...
- Linux基础知识介绍
1.Linux知识说明1)文件位置 1)/etc/inittab2)模式介绍 0:挂起模式-不推荐 1:单用户模式-只有管理员可以进入该模式,可以修改root密码,处理有登录权限而没有修改文件的权限问 ...
- ubuntu16 安装elasticsearch6.3问题
1.ubuntu16 安装elasticsearch6.3 elasticsearch 6.3需要的java的版本是1.8以上 安装java1.8 详见本博客的安装java https://www.c ...
- 2012-2013 ACM-ICPC, NEERC, Central Subregional Contest C Sequence (打表)
打个表找找规律,到24445的时候乘2以后产生了0出现循环. 一般地,判断循环节是否存在可以用Floyd判圈算法. #include<bits/stdc++.h> using namesp ...
- Codeforces Round #316 (Div. 2) B Simple Game 贪心
贪心,如果m分成的两个区间长度不相等,那么选长的那个区间最接近m的位置,否则选m-1位置,特判一下n等于1的情况 #include<bits/stdc++.h> using namespa ...
- CPP-基础:单目运算符重载
关于++运算符前置和后置重载的实现实例: #include <iostream> using namespace std; //创建时钟类 class Clock { public: Cl ...