专栏首页python3面向过程编程

面向过程编程

目录

面向过程编程是解决问题的一种思想,相当于武林门派,武林门派之间没有好坏之分,因此它与我们之后学习的面向对象编程其实没有好坏之分。

面向过程编程,核心是编程二字,过程指的是解决问题的步骤,即先干什么、后干什么、再干什么、然后干什么……

基于该思想编写程序就好比在设计一条流水线,面向对称编程其实是一种机械式的思维方式。

当我们写登录功能,我们首先需要输入账号、密码,然后认证两次密码是否相同,然后从数据库中读取密码验证用户密码输入是否正确,然后输入验证码……之后,我们就能够实现登录功能。这样把登录功能问题流程化,进而是解决问题的思路非常清晰。

优点:复杂的问题流程化,进而简单化。

生产汽水瓶的流水线,没办法生产特斯拉。流水线下一个阶段的输入与上一个阶段的输出是有关联的。因此他的扩展性极差。

缺点:扩展性差。

注册功能(掌握)

接受用户输入用户名,进行合法性校验,拿到合法的用户名

def check_username():
    username = input('username>>>').strip()
    if username.isalpha():
        return username
    else:
        print('用户名必须为字母,傻叉')

接受用户输入密码,进行合法性校验,拿到合法的密码

def check_pwd():
    while True:
        pwd = input('password>>>').strip()
        if len(pwd) < 5:
            print('密码长度至少五位')
            continue
        re_pwd = input('re_password>>>').strip()
        if pwd == re_pwd:
            return pwd
        else:
            print('两次输入密码不一致')

将合法的用户名和密码写入文件

def insert(username, pwd, path='57.txt'):
    with open(path, 'a', encoding='utf8') as fa:
        fa.write(f'{username}:{pwd}\n')

注册

def register():
    username = check_username()
    pwd = check_pwd()
    insert(username, pwd)
    print(f'{username}注册成功')


register()
username>>>nick
password>>>12345
re_password>>>12345
nick注册成功

如果现在我们需要校验用户的年龄,因此我们需要增加一个check_age()方法,并且其他有牵连的地方都需要修改,因此它的扩展性极差。

封装文件读写功能

# def register():
#     while True:
#         username = input('username>>>').strip()
#         # 检测用户是否重复,如果重复则重新输入
#         with open('db.txt', 'r', encoding='utf8') as fr:
#             for line in fr:
#                 info = line.strip('\n').split(':')
#                 if username == info[0]:
#                     print('用户名已经存在')
#                     break
#             else:
#                 # 用户名不存在
#                 # 跳出循环,不用重复输入用户名字
#         res =

# def tell_info():
#     username = input('username>>>').strip()
#     with open('db.txt', 'r', encoding='utf8') as fr:
#         for line in fr:
#             info = line.strip('\n').split(':')
#             if username == info[0]:
#                 return info

数据处理层

def select(username):
    with open('db.txt', 'r', encoding='utf8') as fr:
        for line in fr:
            info = line.strip('\n').split(':')
            if username == info[0]:
                return info


def tell_info():
    username = input('username>>>').strip()
    info = select(username)
    print(info)

用户功能层

def register():
    while True:
        username = input('username>>>').strip()
        # 检测用户是否重复,如果重复则重新输入
        res = select(username)
        if res:
            print('用户名已经存在')
        else:
            break

    while True:
        pwd = input('password>>>').strip()
        re_pwd = input('re_password>>>').strip()
        if pwd != re_pwd:
            print('两次输入密码不一致,请重新输入')
        else:
            break

把注册功能分开之后,功能与功能直接解耦合,复杂的问题流程化,更加清晰。

分层实现功能(掌握)

  • 用户功能层:实现用户具体的功能。
  • 接口层:连接数据处理层和用户功能层。
  • 数据处理层:处理数据后把结果交给接口层。

分层实现功能的好处:当我们需要实现web端和app端的软件,我们只要把数据处理层和接口层写好,然后实现不同的用户功能层即可,web端使用web端的用户功能层,app端使用app端的用户功能层,但是接口层和数据处理层是通用的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Django 开发拓展 auth 模块,

    使用局部钩子函数 _clean_fields() 对 username、email 字段进行验证时,未返回,具体请参考 _clean_fields() 函数源码...

    py3study
  • python 3 if else 流程判

    py3study
  • 内置函数,面向过程编程

    分层实现功能的好处:当我们需要实现web端和app端的软件,我们只要把数据处理层和接口层写好,然后实现不同的用户功能层即可,web端使用web端的用户功能层,a...

    py3study
  • spring boot 使用websocket

    路过君
  • SQL注入绕过字段固定值限制

    按照常规的手段,当addslashes与GBK相遇时,就是为了考察宽字节注入呗。 所以开开心心的构造URL username=-1%df' or 1=1 %23...

    yumusb
  • WriteUp分享 | LCTF的一道preg_match绕过+出题人的锅

    0x00题目 http://123.206.120.239/ idea/workspace.xml 泄露文件信息,常见于用phpstorm写项目然后同步到git...

    安恒网络空间安全讲武堂
  • 14表单操作

    Dreamy.TZK
  • Django 开发拓展 auth 模块,

    使用局部钩子函数 _clean_fields() 对 username、email 字段进行验证时,未返回,具体请参考 _clean_fields() 函数源码...

    py3study
  • 聊聊登录那些事

    原来分享过一篇文章,Java自定义注解及应用,当时为了能突出重点,直接在url中传了用户的所属角色,并写了一般的做法。加上最近看了一些人的简历,发现神奇的相似,...

    Java识堂
  • PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】

    验证码制作://www.zalou.cn/article/156850.htm 数据库连接://www.zalou.cn/article/156875.htm

    砸漏

扫码关注云+社区

领取腾讯云代金券