Python用户登录系统实现:文件操作、字典与循环逻辑详解
本文通过Python实例讲解用户登录接口的实现过程。内容涵盖文件读写模式(r/w/a)、with语句的使用,以及利用字典存储用户密码、列表处理黑名单。重点演示如何通过for循环和if判断实现用户名错误5次退出、密码错误3次锁定账户的功能,适合Python初学者理解基础数据结构与逻辑控制。
任务要求编写一个用户登录接口。
第一步,程序需接收用户输入的用户名和密码。
第二步,若认证通过,则显示欢迎信息。
第三步,若用户名输入错误,提示用户不存在并重新输入;若累计输错5次,则提示尝试次数过多并退出程序。
第四步,若用户名正确但密码错误,提示密码错误并重新输入;若累计输错3次,则锁定该用户名并提示,随后退出程序。
相关说明文档。
本案例涉及的核心知识点如下:
一、文件的基本操作。
掌握文件操作的基本方法。
f = open('lyrics','r',) #打开文件
first_line = f.readline()
print('first line:',first_line) #读一行
data = f.read()# 读取剩下的所有内容,文件大时不要用
print(data) #打印文件
f.close() #关闭文件
Python中打开文件主要有以下几种模式:
r,表示只读模式,这是默认模式。
w,表示只写模式。使用该模式时文件不可读;若文件不存在则自动创建;若文件已存在,则会清空原有内容。
a,表示追加模式。该模式下文件可读;若文件不存在则自动创建;若文件已存在,则仅在原有内容后追加新内容。
使用with语句可以同时打开多个文件,并且能确保在操作完成后自动关闭文件,避免资源泄露。其语法结构如下:
with open('file1', 'r', encoding='utf-8') as f , \
open('file2', 'w', encoding='utf-8') as f_2 :
...
本例中涉及两个文件:一个用于存储用户名和密码,另一个用于存储黑名单。读取文件后,如何将其转换为Python对象并进行操作,是初学者常遇到的难点。
查阅资料后发现,利用字符串的split方法,可以根据逗号分隔符将字符串断开,生成一个子字符串列表。通过这种方式,即可对黑名单数据进行查找和处理。
...
user_lis_bak = f.readline().split(',')
...
Python字典的setdefault()函数与get()方法类似。当指定的键已存在于字典中时,返回该键的值;若键不存在,则添加该键并将值设为默认值(默认为None)。
dict.setdefault(key, default=None)
二、列表和字典的使用。
列表是Python中最常用的数据类型之一,通过列表可以实现数据的便捷存储和修改操作。
names = ['xiaoli',"xiaoming",'yuanlu']
可以通过下标访问列表中的元素,下标索引从0开始计数。
>>> names[0] 'xiaoli' >>> names[1] 'xiaoming' >>> names[-1] 'yuanlu' >>> names[-2] #还可以倒着取 'xiaoming'
字典是一种key-value(键值对)的数据类型,其使用方式类似于实体字典,通过笔画或字母查找对应页的详细内容。
info = {
'xiaoli': "123456",
'xiaoming': "111111",
'yuanlu': "888888",
}
在此场景中,key为用户名,value为密码,二者一一对应,且key具有唯一性。
三、for循环和if...else条件判断。
for i in range(10): print(i)
基于上述程序逻辑,当循环次数超过5次时,程序将直接退出。
for i in range(10):
if i>5:
continue #不往下走了,直接进入下一次loop
print(i)
用户名和密码文件的格式示例如下:
xiaoli 123456
xiaoming 888888
wangpeng 111111
luyuan 112222
qiling 556666
haiming 223333
黑名单文件的格式示例如下:
xiaoli,xiaoming,wangpeng,
完整代码实现。
with open('user_lis', 'r', encoding='utf-8') as f_user_lis,\
open('user_lis_bak', 'r', encoding='utf-8') as f_user_lis_bak: # 打开文件'user_lis'和'user_lis_bak'
user_lis_bak = f_user_lis_bak.read().split(',') # 读取f_user_lis_bak并转成列表赋值给 user_lis_bak
user_lis_dict = {} # 定义一个空字典
for i in f_user_lis:
user_lis_dict.setdefault(i.split()[0], i.split()[1]) # 读取f_user_lis并把值放入字典user_lis_dict中
count = 0
for i in range(5): # 设置错误次数上限为5次
name = input('请输入用户名>>')
password = input('请输入密码>>')
if name in user_lis_bak: # 第一步先查找黑名单
print('用户名已被锁定,请联系管理员!!!')
continue # 在黑名单中直接进入下一次循环,重新输入用户名和密码
elif name in user_lis_dict: # 第二步查找用户白名单
if password == user_lis_dict.get(name): # 密码正确,验证通过 退出
print('亲爱的会员', name, '欢迎回来')
break
else: # 密码错误,提示错误
if count == 2:
name_bak_write = open('user_lis_bak', 'a', encoding='utf-8')
name_bak_write.write(name+',')
name_bak_write.close() # 3次密码错误,就把用户名写进黑名单
print('用户名已锁定,请联系管理员!!!')
break
print('密码错误!!!')
count += 1 # 密码错一次,count就+1
else:
if i == 4: # 用户名错5次,直接退出
print('尝试次数过多,再见!!!')
continue
print('用户名不存在!!!') # 用户名错误,提示错误
以上关于Python用户登录系统实现的讲解到此结束,希望能为读者提供参考,欢迎继续支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













