首页 > 解决方案 > Python登录限制

问题描述

我正在尝试对我当前的代码实施登录尝试系统,但我不知道应该在哪里打勾。有人可以提出任何建议吗?我想尝试登录三次,如果用户登录失败,系统将锁定用户。我只是不知道在哪里正确定位代码。

granted = False
def grant():
    global granted
    granted = True
def login(name,password):
    success = False
    file = open("user_details.txt","r")
    for i in file:
        a,b = i.split(",")
        b = b.strip()
        if(a==name and b==password):
            success=True
            break
    file.close()
    if(success):
        print("Login Succesful")
        grant()
    else:
        print("wrong username or password")

标签: python

解决方案


解决此问题的更好方法是使用JSON文件而不是txt文件。您可以拥有以下格式的文件:

{
"username": {
 "password": "",
 "attempts": 0,
 }
}

如果密码错误,则在login()函数中增加并写入尝试次数。在函数开始之前读取 JSON 并检查该attempts值是否大于 3。如果大于 3,则发送适当的消息以继续登录操作并询问密码。

您的代码有一些小错误,我在这里处理过:

import re
granted = False
def grant():
    global granted
    granted = True
def login(name,password):
    success = False
    file = open("user_details.txt","r")
    for i in file:
        if i.count(',') > 0:                    # check whether i has at least one ','
          a,b = i.split(",")
          b = b.strip()
          if(a==name and b==password):
              success=True
              break
    file.close()
    if(success):
        print("Login Succesful")
        grant()
    else:
        print("wrong username or password")
def register(name,password):
    file = open("user_details.txt","a")
    file.write( "\n"+name[0]+","+password)      # name is an array so only the first element is stored.
    file.close()
    grant()
def access(option):
    global name
    if(option=="login"):
        name = input("Enter your name: ")
        password = input("enter your password: ")
        login(name,password)
    else:
        print("Enter yor name and password to register")
        name = input("Please enter your name: ").lower().split()
        if len(name) > 1:
           first_letter = name[0][0]
           three_letters_surname = name[-1][:3].rjust(3, 'x')
           name = '{}{}'.format(first_letter, three_letters_surname)
           print(name)
        while True:
            password = input("Enter a password: ")
            if len(password) < 8:
               print("Make sure your password is at lest 8 letters")
            elif re.search('[0-9]',password) is None:
                print("Make sure your password has a number in it")
            elif re.search('[A-Z]',password) is None:
               print("Make sure your password has a capital letter in it")
            else:
                print("Your password seems fine")
                break
        register (name,password)
def begin():
    global option
    print("Welcome to Main Menu")
    option = input("Login or Register (login,reg): ")
    if(option!="login" and option!="reg"):
        begin()
begin()
access(option)
if(granted):
    print("Welcome to main hub")
    print("#### Details ###")
    print("Username:",name)

推荐阅读