• 初学 python 之 用户登录实现过程


    要求编写登录接口 : 1. 输入用户名和密码

                              2.认证成功后显示欢迎信息

                              3.用户名输错,提示用户不存在,重新输入(5次错误,提示尝试次数过多,退出程序) 

                              4.用户名正确,密码错误,提示密码错误,重新输入.(密码错误3次,锁定用户名并提示,退出程序)

    readme

    应用知识点:

    一,文件的操作

    基本操作

     

     f = open('lyrics','r',) #打开文件
     first_line = f.readline()
     print('first line:',first_line) #读一行
     data = f.read()# 读取剩下的所有内容,文件大时不要用
     print(data) #打印文件
     f.close() #关闭文件
    View Code

    打开文件的模式有:

    • r,只读模式(默认)。
    • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
    • a,追加模式。【可读;不存在则创建;存在则只追加内容;】 

        with语句 ,同时打开多个文件,还可以避免打开文件后忘记关闭,语法:  

    1 with open('file1', 'r', encoding='utf-8') as f , 
    2         open('file2', 'w', encoding='utf-8') as f_2 :
    3       ...
    View Code

    本例中有2个文件,一个存用户名和密码,另一个存黑名单.在读取文件后怎样转变成python对象,然后对对象进行操作,是我遇到的第一个难点!

    然后查了下资料,发现字符串split方法,可以把字符串,从逗号分隔符的地方断开,得到一个子字符串列表.这样一来,就可以对黑名单进行查找等操作了.

     

     ...
    2 user_lis_bak = f.readline().split(',')
    3 ...


    Python 字典 setdefault() 函数和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值。

     1 dict.setdefault(key, default=None)

    二,列表和字典 

    列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作

     1 names = ['xiaoli',"xiaoming",'yuanlu'] 

    通过下标访问列表中的元素,下标从0开始计数

    >>> names[0]
    'xiaoli'
    >>> names[1]
    'xiaoming'
    >>> names[-1]
    'yuanlu'
    >>> names[-2] #还可以倒着取
    'xiaoming'

     

    字典是一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

    1 info = {
    2     'xiaoli': "123456",
    3     'xiaoming': "111111",
    4     'yuanlu': "888888",
    5 }
    这里key是用户名,value是密码,一一对应,key是唯一的.

    三,for loop 和 if...else

    1 for i in range(10): print(i) 

    : 3 continue #不往下走了,直接进入下一次loop 4 print(i)

    用户名和密码文件格式: 

    xiaoli 123456

    xiaoming 888888

    wangpeng 111111

    luyuan 112222

    qiling 556666

    haiming 223333

    黑名单文件格式: 

    xiaoli,xiaoming,wangpeng,

    代码

     

     1 with open('user_lis', 'r', encoding='utf-8') as f_user_lis,
     2          open('user_lis_bak', 'r', encoding='utf-8') as f_user_lis_bak:  # 打开文件'user_lis'和'user_lis_bak'
     3     user_lis_bak = f_user_lis_bak.read().split(',')      # 读取f_user_lis_bak并转成列表赋值给 user_lis_bak
     4     user_lis_dict = {}                                  # 定义一个空字典
     5     for i in f_user_lis:
     6         user_lis_dict.setdefault(i.split()[0], i.split()[1])   # 读取f_user_lis并把值放入字典user_lis_dict中
     7 count = 0
     8 for i in range(5):                                 # 设置错误次数上限为5次
     9     name = input('请输入用户名>>')
    10     password = input('请输入密码>>')
    11     if name in user_lis_bak:                       # 第一步先查找黑名单
    12         print('用户名已被锁定,请联系管理员!!!')
    13         continue                                   # 在黑名单中直接进入下一次循环,重新输入用户名和密码
    14     elif name in user_lis_dict:                     # 第二步查找用户白名单
    15         if password == user_lis_dict.get(name):     # 密码正确,验证通过 退出
    16             print('亲爱的会员', name, '欢迎回来')
    17             break
    18         else:                                      # 密码错误,提示错误
    19             if count == 2:
    20                 name_bak_write = open('user_lis_bak', 'a', encoding='utf-8')
    21                 name_bak_write.write(name+',')
    22                 name_bak_write.close()             # 3次密码错误,就把用户名写进黑名单
    23                 print('用户名已锁定,请联系管理员!!!')
    24                 break
    25             print('密码错误!!!')
    26             count += 1                             # 密码错一次,count就+1
    27     else:
    28         if i == 4:                                 # 用户名错5次,直接退出
    29             print('尝试次数过多,再见!!!')
    30             continue
    31         print('用户名不存在!!!')                   # 用户名错误,提示错误
    View Code
  • 相关阅读:
    博客图片上传picgo工具安装配置github图传使用
    安装配置hexo icarus主题配置
    通往远方的道路总是漫长的
    java 关于值引用、地址引用的问题
    Java设计模式の迭代器模式
    Java设计模式の模版方法模式
    vim 常用快捷键(整理版)
    Java设计模式の责任链模式
    Java设计模式の代理模式
    java rmi远程方法调用实例
  • 原文地址:https://www.cnblogs.com/fuyuteng/p/8523284.html
Copyright © 2020-2023  润新知