zoukankan      html  css  js  c++  java
  • Python脚本实现基于文件存储的用户登录程序

     1 #!/usr/bin/env python
     2 # coding:utf-8
     3 
     4 """
     5     aim: 基于文件存储的用户登录程序(3次登录失败,锁定用户)
     6     
     7     need: 
     8         a. 用户信息文件
     9         b. 用户输入
    10     
    11     logical:
    12         a. 校验用户名合法情况
    13         b. 校验用户锁定情况
    14         c. 校验密码
    15         d. 更新登录失败次数
    16         e. 写入文件
    17         
    18     sum:
    19         a. 更新用户锁定次数不要直接操作文件,可先写入内存,程序退出之前写入文件
    20         b. 逻辑判断情况
    21 """
    22 
    23 # 读文件,获取用户信息  str
    24 f1 = open('db', 'r')
    25 content = f1.read()
    26 f1.close()
    27 
    28 # 转换用户信息从str到list
    29 user_data_list = content.split('
    ')
    30 user_detail_list = []
    31 
    32 # 将用户信息以字典的形式保存到列表
    33 for user_info in user_data_list:
    34     user_detail = user_info.split('|')
    35     user_detail_list.append({
    36         'name': user_detail[0],
    37         'pwd': user_detail[1],
    38         'times': user_detail[2]
    39     })
    40 
    41 print("""
    42 欢迎来到老男孩教育集团,请先登录!
    43 """)
    44 
    45 # 主程序退出标志位
    46 flag = True
    47 # 退出次数
    48 exit_flag = 3
    49 # main process
    50 while flag:
    51     user_name = input("用户名(退出[quit]): ")
    52     # 退出判断
    53     if user_name != 'quit':
    54         # 遍历用户信息列表
    55         for item in user_detail_list:
    56             # 判断用户名是否存在
    57             if user_name == item['name']:
    58                 # 用户存在判断是否锁定
    59                 if int(item['times']) < exit_flag:
    60                     user_pwd = input("密码: ")
    61                     # 校验密码
    62                     if user_pwd == item['pwd']:
    63                         print('登录成功')
    64                         # 更新字典
    65                         item['times'] = 0
    66                         # 更新while循环标志位
    67                         flag = False
    68                         # 退出for循环
    69                         break
    70                     else:
    71                         print('密码错误')
    72                         # 更新字典
    73                         item['times'] = int(item['times']) + 1
    74                         # 退出for循环,继续输入用户名
    75                         break
    76                 else:
    77                     print("用户已经锁定")
    78                     break
    79         else:
    80             print('用户名不存在')
    81     else:
    82         flag = False
    83 
    84 # 最后,将用户信息写入文件
    85 # 处理字符串
    86 result_info = ''
    87 for item in user_detail_list:
    88     item_str = '%s|%s|%s' % (item['name'], item['pwd'], item['times'])
    89     if result_info.strip() == '':
    90         result_info += item_str
    91     else:
    92         result_info = result_info + '
    ' + item_str
    93 
    94 # 写入文件
    95 f2 = open('db', 'w')
    96 f2.write(result_info)
    97 f2.close()
  • 相关阅读:
    Atmel Studio 烧录 Atmega328P(Arduiono)
    JSP内置对象详解及示例
    Hash Map 详细解释及示例
    19年双非学长逆袭985考研经验贴
    camelCase命名规范
    开始我的编程之旅!
    【转】堆和栈的区别
    现场编写类似strstr/strcpy函数
    【转】C++多态篇1一静态联编,动态联编、虚函数与虚函数表vtable
    【转】TCP协议中的三次握手和四次挥手(图解)
  • 原文地址:https://www.cnblogs.com/alibner/p/6816215.html
Copyright © 2011-2022 走看看