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 !")



  • 相关阅读:
    linux 文件搜索
    解决android 无法打开 DDMS 中的data目录
    JAVA 截图+tess4j识别
    JAVA 获取网页源代码保存到本地文件
    java连接sqlserver数据简单操作
    SQL server 2008 安装提示:属性不匹配
    SQLServer 安装提示需要重启计算机的解决方案
    Android蓝牙----打开,关闭操作
    JAVA中String类的比较
    Android中的AlertDialog和ProgressDialog用法
  • 原文地址:https://www.cnblogs.com/uyahs/p/7669566.html
Copyright © 2011-2022 走看看