用python写多用户登陆

来源:互联网 发布:php exec 1 编辑:程序博客网 时间:2024/06/02 05:15

需求:

1、让用户输入登陆信息,支持多用户登陆;

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

3、三次认证失败后退出程序,再次启动程序尝试登陆时,还是锁定状态。

# --*-- coding:utf-8 --*--

#! usr/bin/env/python

import os.pathuser_msg = {'Yuanyachao':'abc123','Zhaolu':'bca123','Alex':'cba123'}   #create a user messagecount = 1  #从1开始,后面用来打印这是第几次机会print('you have 3 opportunities to guess\nif over 3 times wrong your acount will be locked.')while count < 4:    if not os.path.isfile('lock_file.txt'):   #判断文件是否存在,如果存在就不执行本条件语句        f = open('lock_file.txt','w')      #如果文件不存在,则以读的方式创建一个文件        f.write(str(count))                  #并写入当前count值        f.close()    f = open('lock_file.txt', 'r+')        #打开文件    n = f.read()                             # 读取文件中的值    if n and int(n) == 4:                    # 如果读取到值并且值为4,执行以下        print('your acount has been locked')    #打印已经被锁定了        f.close()                                  #关闭文件        break                                     #退出循环    print('the %s chance:' % n)              #如果没被锁定打印这是第几次机会,n值从文件读取,而不是用count值    in_name = input('name:')    in_psw = input('password:')    if in_name in user_msg and in_psw == user_msg[in_name]:   #输入正确        print('welcom',in_name)        f.seek(0)                                               #指针重置为0        f.write('1')                                            #文件中的值重置为1        f.close()        break    else:        print('wrong name or password')    count += 1    f.seek(0)    f.write(str(int(n)+1))                                     #错一次,文件中的值就加一次,这样即使本次输入错误,退出程序后,下次再错错误次数会累加    f.close()    if count == 4:        print('your acount is locked')


上面的小程序存在一些问题,那就是并没有检测账户是否存在,而且输错三次(不管输出的是什么)后程序就会锁定,这明显不符合逻辑。

下面写个升级版,附加需求:1、检测账户是否存在;2、用户名输错后提示;3、已有的用户名如果密码输错三次就锁定。

# --*-- encoding:utf-8 --*--#! usr/bin/env python3import os.pathimport pickleuser_msg = {'Yuanyachao':'abc123','Lilu':'bca123','Alex':'cba123'}print('you have 3 opportunities to guess\nif over 3 times wrong your acount will be locked.')while True:    if not os.path.isfile('lock_file'):   #判断文件是否存在,如果存在就不执行本条件语句        f = open('lock_file','wb')      #如果文件不存在,则以写入二进制的方式创建一个文件        lock_msg = {'Yuanyachao': 0, 'Lilu': 0, 'Alex': 0}   #初始化一个登陆几次的状态        pickle.dump(lock_msg,f)                  #将初始化的登陆状态dump到文件中        f.close()    f = open('lock_file','rb+')                 #以读写二进制的方式打开文件    lock_msg = pickle.load(f)                      # 将登陆几次的状态(不一定是初始的)load出来    # print(lock_msg)    in_name = input('name:')    if in_name not in lock_msg:                 #判断用户输入的用户名是否存在,如果不存在执行以下        print('No such account! Try again!')        f.close()                           #如果不存在不用管正确账户总共登陆了几次,直接关闭文件        continue                            #如果不存在则重新输入,在这里输入次数没有给出限制,即错误的账户名可以重复试    if lock_msg[in_name] == 3:              #判断用户总共登陆错误几次,超过三次执行以下        print('your account has been locked,please contact the administrator!')        f.close()        break           #如果错误三次的账户又输入了相同的账户,则退出程序,如果输入了别的账户不会退出    in_psw = input('password:')    if in_psw == user_msg[in_name]:     #即账户名和密码都正确执行以下        print('Welcome',in_name)        lock_msg[in_name] = 0        f.seek(0)        pickle.dump(lock_msg,f)        f.close()        break    else:                                   #账户名正确但密码不正确执行以下        print('Wrong password!')        lock_msg[in_name] += 1                 #将登陆状态更新,即当前输错的账户登陆次数+1        print('%s error' % lock_msg[in_name])        f.seek(0)        pickle.dump(lock_msg,f)                 #将新的登陆状态dump入文件,进行下次循环        f.close()


原创粉丝点击