Python用户登录系统实现:文件操作、字典与循环逻辑详解

凌晨两点半
凌晨两点半
发布时间:2026-10-13| 1人浏览过
原创

本文通过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用户登录系统实现的讲解到此结束,希望能为读者提供参考,欢迎继续支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。