要求编写登录接口 : 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() #关闭文件 打开文件的模式有:
  • r,只读模式(默认)。
  • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
  • a,追加模式。【可读;不存在则创建;存在则只追加内容;】

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

 with open('file1', 'r', encoding='utf-8') as f , \
open('file2', 'w', encoding='utf-8') as f_2 :
...

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

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

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

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

1 dict.setdefault(key, default=None)

二,列表和字典 

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

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

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

1 >>> names[0]
2 'xiaoli'
3 >>> names[1]
4 'xiaoming'
5 >>> names[-1]
6 'yuanlu'
7 >>> names[-2] #还可以倒着取
8 '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,

代码

with open('user_lis', 'r', encoding='utf-8') as f_user_lis,\
         open('user_lis_bak', 'r', encoding='utf-8') as f_user_lis_bak:  # 打开文件'user_lis'和'user_lis_bak'
    user_lis_bak = f_user_lis_bak.read().split(',')      # 读取f_user_lis_bak并转成列表赋值给 user_lis_bak
    user_lis_dict = {}                                  # 定义一个空字典
    for i in f_user_lis:
        user_lis_dict.setdefault(i.split()[0], i.split()[1])   # 读取f_user_lis并把值放入字典user_lis_dict中
count = 0
for i in range(5):        # 设置错误次数上限为5次
    name = input('请输入用户名>>')
    password = input('请输入密码>>')
    if name in user_lis_bak:       # 第一步先查找黑名单
        print('用户名已被锁定,请联系管理员!!!')
        continue         # 在黑名单中直接进入下一次循环,重新输入用户名和密码
    elif name in user_lis_dict:          # 第二步查找用户白名单
        if password == user_lis_dict.get(name):     # 密码正确,验证通过 退出
            print('亲爱的会员', name, '欢迎回来')
            break
        else:      # 密码错误,提示错误
            if count == 2:
                name_bak_write = open('user_lis_bak', 'a', encoding='utf-8')
                name_bak_write.write(name+',')
                name_bak_write.close()     # 3次密码错误,就把用户名写进黑名单
                print('用户名已锁定,请联系管理员!!!')
                break
            print('密码错误!!!')
            count += 1       # 密码错一次,count就+1
    else:
        if i == 4:      # 用户名错5次,直接退出
            print('尝试次数过多,再见!!!')
            continue
        print('用户名不存在!!!')    # 用户名错误,提示错误

____author___JayeHe

初学 python 之 用户登录实现过程的更多相关文章

  1. python实现用户登录问候

    创建一个至少包含 5个用户名的列表,且其中一个用户名为 'admin' .想象你要编写代码,在每位用户登录网站后都打印一条问候消息.遍历用户名列表,并向每位用户打印一条问候消息.添加一条 if 语句, ...

  2. python实现用户登录、注册实例

    python面向函数式编程,模拟用户登录验证.注册的代码实现. 主要有以下两个文件: 1.user.txt文档文件,相当于数据库的用户信息表,主要是记录用户名和密码. 注意:1)此文档需要与.py文件 ...

  3. python程序—用户登录

    编写一个用户登录程序: 1.登录成功显示登录页面 2.登录失败,显示密码错误,并且显示错误几次 3.登录失败三次,退出程序 username= 'root' passwd= ' count= prin ...

  4. Python入门-用户登录程序升级版

    编写登陆接口 基础需求: 让用户输入用户名密码 认证成功后显示欢迎信息 输错三次后退出程序 升级需求: 可以支持多个用户登录 (提示,通过列表存多个账户信息) 用户3次认证失败后,退出程序,再次启动程 ...

  5. python案例-用户登录

    要求: •输入用户名密码 •认证成功后显示欢迎信息 •输错三次后锁定 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 "" ...

  6. python实现用户登录界面

    要求 输入用户名密码正确,提示登录成功, 输入三次密码错误,锁定账户. 实现原理: 创建两个文件accout,accout_lock accout记录用户名,密码 accout root 1qazxs ...

  7. 【Python】用户登录三次锁定

    这是从另外一个博客考过了的,借鉴一下,怕下次找不到1 # -*- coding:utf-8 -*- 2 3 #登录三次锁定用户 4 5 #用于计数(循环三次的判断) 6 count = 0 7 8 # ...

  8. python 模拟用户登录代码

    需求:输入用户名,判断用户是否被锁定,锁定则退出,否则进入密码验证,输入三次错误密码之后此用户被锁定. userlist.txt里,用":"将用户名.密码.状态码分开: [root ...

  9. MySQL 初学笔记 ① -- MySQL用户登录权限控制

    1. MySQL 登录 MySQL -u username -p 2. MySQL 创建用户 use mysql //进入mysql 表 INSERT INTO user (Host,User,Pas ...

随机推荐

  1. Linux文件共享(单进程之间、多进程之间)

    转载:https://www.cnblogs.com/frank-yxs/p/5925603.html 在同一个进程中,实现文件共享的方法有两种: 多次使用open函数打开相同文件 使用dup/dup ...

  2. FREESWITCH 填坑指南

    转接 1.查看网关注册状态 sofia status 2.桥接(未实践) http://wiki.freeswitch.org.cn/wiki/Mod_lua.html#jump10237 frees ...

  3. Win10:已禁用IME

    问题 windows10莫名其妙地禁用了IME,导致的结果便是浏览器不能输入中文. 百度搜索的答案都是tmd 控制中心-->管理-->任务XXX,但是我的 任务XXX打不开啊. 解决 go ...

  4. liunx中安装包及其应用

    1. dpkg -i <package>  安装包 dpkg -r <package>   删除包 dpkg -P <package> 移除包和配置文件 dpkg ...

  5. 记录几个ubuntu环境下的php相关的路径

    php路径 /usr/bin/php phpize5 /usr/bin/phpize5 php5-fpm /usr/sbin/php5-fpm php所有的配置文件 /etc/php5/fpm 重启p ...

  6. 常用css样式函数总结

    1:按钮样式 /*按钮*/ @mixin btn-style($btnwidth, $color, $bgcolor, $bdcolor) { width: $btnwidth; height: 30 ...

  7. web 纯 javascript 的MVC 实现的简单实践

    现在javascript是越来越火了,好多javascript框架随之产生,大大简化了我们的开发,一般的开发模式大家是比较喜欢MVC 的model controller view 这种模式 方便了我们 ...

  8. error MSB3073: 命令“regsvr32 /s /c:VCEnd”已退出,代码为 3

    版权声明:博客地址:blog.csdn.net/x356982611,未经同意不得转载,不得转载,不得转载 https://blog.csdn.net/x356982611/article/detai ...

  9. Jmeter 在linux下的分布式压测

    Jmeter 在linux下的分布式压测 0.将 windows机器作为master 控制机(同时也兼做负载机slave), linux机器作为 负载机 slave. 1.linux环境安装 : (1 ...

  10. 在服务端处理同步发送小消息的性能上Kafka>RocketMQ>RabbitMQ

    在发送小消息的场景中,三个消息中间件的表现区分明显: Kafka的吞吐量高达17.3w/s,远超其他两个产品.这主要取决于它的队列模式保证了写磁盘的过程是线性IO.此时broker磁盘IO已达瓶颈. ...