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. hdu2475Box(splay树形转线性)

    链接 推荐一篇帖子 http://blog.csdn.net/lyhypacm/article/details/6734748 这题暴力不可行主要是因为这颗树可能极度不平衡,不能用并查集是不能路径压缩 ...

  2. 单线程单元(STA)线程都应使用泵式等待基元

    CLR 无法从 COM 上下文 0x20ad98 转换为 COM 上下文 0x20af08,这种状态已持续 60 秒.拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows ...

  3. 修改Azure Website默认时区

    Azure Website默认时区为国际标准时间,对中国用户来说不太方便友好,如何设置成北京时间呢? 打开Azure Website的“配置”页,找到“应用设置”节点. 在应用设置中添加设置项,密钥为 ...

  4. springJDBC 事物隔离

    五.Spring-jdbc的实现 第一步:导jar包 pom.xml <!--引入spring-beans节点--><dependency>    <groupId> ...

  5. rsyslog+analyzer

    环境:最小化centos6.2 准备:rsyslog-4.6.1.tar.gz  loganalyzer-3.6.3.tar.gz wget http://download.adiscon.com/l ...

  6. vba 两个表 信息合体一个表格

    1 把Excel某一区域的内容读入到数组中: Dim strArray() As Variant Dim wk_data As Variant Set wk_data = Sheets("S ...

  7. decompressedResponseImageOfSize:completionHandler:]_block_invoke

    原因:   It turns out the linker error was caused by the CGImageSourceCreateWithData call. And the root ...

  8. Android(java)学习笔记146:网页源码查看器(Handler消息机制)

    1.项目框架图: 2.首先是布局文件activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com ...

  9. 手把手教你写 Vue UI 组件库

    最近在研究 muse-ui 的实现,发现网上很少有关于 vue 插件具体实现的文章,官方的文档也只是一笔带过,对于新手来说并不算友好. 笔者结合官方文档,与自己的摸索总结,以最简单的 FlexBox  ...

  10. kmp 模板

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<algorithm> ...