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. Gym 101149I I - It's the Police

    http://codeforces.com/gym/101149/problem/I 考虑下面这个例子 4 3 1 2 1 3 1 4 应该是选 0 0 1 1这样是最优的,我们不选1号,因为如果选1 ...

  2. MDX之Case When用法

    with member [Measures].[终端销售数量总计] as sum(ytd([日期].[年月].CurrentMember),[Measures].[终端销售数量]) member [M ...

  3. 07.Javascript——入门高阶函数

    高阶函数英文叫Higher-order function..JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数 ...

  4. kafka java api生产者

    import java.util.HashMap; import java.util.List;import java.util.Map;import java.util.Properties; im ...

  5. Volley源码解析(三) 有缓存机制的情况走缓存请求的源码分析

    Volley源码解析(三) 有缓存机制的情况走缓存请求的源码分析 Volley之所以高效好用,一个在于请求重试策略,一个就在于请求结果缓存. 通过上一篇文章http://www.cnblogs.com ...

  6. JavaScript实现的水果忍者游戏,支持鼠标操作

    智能手机刚刚普及时,水果忍者这款小游戏可谓风靡一时.几年过去了,现在,让我们用纯JavaScript来实现这个水果忍者游戏,就算是为了锤炼我们的JavaScript开发技能吧. 大家可以通过这个链接在 ...

  7. LintCode 30插入区间

    问题 给出一个无重叠的按照区间起始端点排序的区间列表. 在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间). 样例 插入区间[2, 5] 到 [[1,2], ...

  8. -[UPAInitViewController startAPPay] in libUPAPayPlugin.a(UPAInitViewController.o)

    问题 Undefined symbols for architecture arm64: "_PKPaymentNetworkChinaUnionPay", referenced ...

  9. 解决Starting to watch source with Jekyll and Compass. Starting Rack on port 4000

    问题 Starting to watch source with Jekyll and Compass. Starting Rack on port 4000 rake aborted! Errno: ...

  10. Session 机制和 Cookie 机制

    Session 机制和 Cookie 机制 HTTP协议是无状态的, 而Cookie和Session都是在无状态的基础上希望实现有状态的效果, 两者是在客户端或者是服务端使用缓存等手段来实现状态的维护 ...