python - 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")
解决方案
解决此问题的更好方法是使用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)
推荐阅读
- java - 使用 yml 配置而不是standalone.xml
- python - 删除字符串中出现的元音
- android - 使用正则表达式进行选择时,ContentResolver.query() 的 Android-studio 问题
- c - 从具有指定字节顺序的二进制 unsigned char* 读取 C 中的 double
- python - Change plt.imshow() into cv2.imshow() in Python
- machine-learning - 机器学习问题中的特征选择
- php - 如何使用 php 和 TCPDF 在 pdf 中绘制虚线?
- regex - 正则表达式替换异常
- docker - 使用 netcat 连接到运行 golang 服务器的 docker 容器
- excel - 显示编译错误:检测到不明确的名称,同时重载函数