zoukankan      html  css  js  c++  java
  • python基础学习登陆作业

    blog addr: http://www.cnblogs.com/uyahs/p/7667783.html
    program summary:
    该程序运行在python3.X环境中
    该程序共两个文件,需要放在同一目录下。
    主程序为zuoye_login.py
    zuoye_login.txt 为存储账号信息的文件,如需增加账号密码格式如下:
    user:password;0

    程序运行后会先进行账号密码的输入,输入后程序会从密码文本中进行查找和比对信息,如果正确则显示成功信息
    如果失败则对该账号记录1次错误登陆,超过三次错误登陆,则锁定该账号100秒。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:Xtian
    '''
    这是一个登陆模块,账号密码保存在同目录下zuoye_login.txt文件下
    zoye_login.txt文件格式如:root;server;0 分别是账号,密码,登陆失败次数,三个值之间用分号分隔
    运行此程序后,如果密码错误则会对该账号记录一次错误,超过三次则锁定该账号100秒。
    '''



    import getpass
    import time
    login_status = 0 #这个值为登陆状态,如果等于1表示登陆验证成功
    while True:
    f = open('zuoye_login.txt','r+')
    text = f.read().split(' ')
    f.close()
    guess_user = input("user:")
    guess_passwd = getpass.getpass("password:")
    for j in range(len(text)):
    if guess_user == text[j].split(';')[0]:
    if int(text[j].split(';')[2]) > 2: #如果该账号密码登陆错误次数超过2
    localtime = time.localtime(time.time())
    now_time = int(time.mktime(localtime)) #获取现在的时间戳
    unit_time = int(now_time)-int(text[j].split(';')[3]) #计算出当前时间和记录时间差
    if unit_time > 100: #将时间差与100比较,超过100则可以继续
    text[j] = "%s;%s;0" % (text[j].split(';')[0],text[j].split(';')[1]) #将失败次数重置为0
    new_text = ' '.join(text)
    f = open('zuoye_login.txt', 'w')
    f.writelines(new_text)
    f.close()
    else: #时间差不足100秒,按照登陆失败重新循环
    wait_time = 100 - unit_time #当前还需要等待的时间(秒)
    print("There are too many errors,please wait for %s second" % (wait_time))
    input("please input 'ENTER' to try again")
    break
    if guess_passwd == text[j].split(';')[1]: #判断密码是否正确
    login_status = 1 #将登陆状态更改为1,表示登陆成功
    break
    else:
    if text[j].split(';')[2]: #判断zuoye_login.txt文件中这个账号中的失败次数不为空时进行
    failed_count = int(text[j].split(';')[2]) #获取该账号失败次数
    failed_count += 1 #将该账号失败次数+1
    localtime = time.localtime(time.time())
    failed_login_time = int(time.mktime(localtime)) #获取登陆失败时的时间戳,并存入文件
    text[j] = "%s;%s;%s;%d" % (text[j].split(';')[0],text[j].split(';')[1],failed_count,failed_login_time)
    new_text = ' '.join(text)
    f = open('zuoye_login.txt','w')
    f.writelines(new_text)
    f.close()
    else: #如果zuoye_login.txt文件中此账号的失败次数为空则添加一个失败次数的值
    text[j] = "%s;%s;%s;%s" % (text[j].split(';')[0],text[j].split(';')[1],failed_count,failed_login_time)
    new_text = ' '.join(text)
    f = open('zuoye_login.txt', 'w')
    f.writelines(new_text)
    f.close()
    else:
    continue

    if login_status == 1: #判断是否登陆成功
    print("login success !")
    print("welcome ", guess_user)
    break
    else:
    print("login failed !")



  • 相关阅读:
    Mybatis-plugin插件的使用
    SpringBoot整合mybatis-pagehelper实现分页
    springboot打war包
    keepalived1.4.0安装启动卸载
    六、nginx 搭建高可用集群
    五、nginx的动静分离
    四、nginx的负载均衡
    linux中mysql忘记root密码如何登陆
    十分钟到你了解OpenStack--nova组件
    docker 中 add 和 copy 的区别
  • 原文地址:https://www.cnblogs.com/uyahs/p/7669566.html
Copyright © 2011-2022 走看看