线性查找表的应用:用户登录注册程序

devtools/2024/11/20 0:22:45/

线性查找表是很简单的数据结构和算法。网站的用户登录注册时是基本的功能。本文首先给出线性查找表的基本实现,然后给出在用户登录注册的程序流程图,并将线性查找表应用到用户查询这一具体任务,并基于 Python 语言在控制台实现用户注册、登录的模拟程序。

线性查找表

给定一个数组,比如 12,34,56,78, 查找给定的数字 34 是否在里面,如果在,那么返回索引, 否则返回 -1。

def linear_search(num_list: list, num: int) -> int:"""Search given number in given list and return correspoinding index.Parameters----------num_list : listThe list of numbers to search through.num : intThe number to search for in the list."""for i, n in enumerate(num_list):if n == num:return ireturn -1

测试代码:

if __name__ == '__main__':while True:print("欢迎使用线性查找".center(30, '~'))num_str = input('请输入数组:')num_list = num_str.split(',')num_list = [int(_) for _ in num_list]num = int(input('请输入查找的目标数:'))index = linear_search(num_list, num)print(''.center(38, '='))if index == -1:print('查找的数不存在')breakelse:print(f'查找的数存在,索引为{index}')

用户登录、注册程序

用户登录和注册这两个动作,都涉及线性查找:查找用户名是否存在。 可以应用上一节的代码,变量重命名即可, 思想是一致的。

流程图

在这里插入图片描述

技术点

获取用户输入,并且带提示信息:

name = input('请输入用户名')

判断用户名字是否存在:也就是线性表的查找

    def find_user(self, name):for index, user in enumerate(self.user_list):if user.name == name:return indexreturn -1

代码实现

class User:def __init__(self, name, password):self.name = nameself.password = passwordclass UserService:def __init__(self):self.user_list = []def find_user(self, name):for index, user in enumerate(self.user_list):if user.name == name:return indexreturn -1def exists_user(self, name):return self.find_user(name) >= 0def register(self):# 获取数据name = input('账号: ')password = input('密码: ')# 存储数据if self.find_user(name) >= 0:print('用户已存在, 请重新输入')else:user = User(name, password)self.user_list.append(user)# 返回注册结果print('已注册成功')def login(self):# 获取数据name = input('账号: ')password = input('密码: ')# 校验数据user = User(name, password)index = self.find_user(name)if index == -1:print('账号不存在,请重新输入')elif self.user_list[index].password != password:print('密码错误, 请重新输入')else:# 返回登录结果print('登录成功')def run(self):while True:action = input('注册 or 登录: ')if action == '注册':self.register()elif action == '登录':self.login()else:print('命令输入错误,请重新输入')if __name__ == '__main__':service = UserService()service.run()

References

  • https://blog.csdn.net/qq_42568323/article/details/113565739
  • https://www.bilibili.com/video/BV1bG4y127js

http://www.ppmy.cn/devtools/104762.html

相关文章

sqlite3 db.configure方法详解:设置项与默认值

在Node.js环境中,sqlite3库为开发者提供了一个与SQLite数据库进行交互的简洁API。除了基本的数据库操作外,sqlite3还允许开发者通过db.configure方法来配置数据库的一些底层参数和行为。本文将深入解析db.configure方法,包括其API函数定义、所…

MyBatis 源码解析:Environment 与 DataSource 配置实现

前言 在 MyBatis 框架中,Environment 和 DataSource 是配置管理的核心部分。Environment 负责管理不同的运行环境(如开发、测试、生产环境),而 DataSource 则管理数据库连接的配置和管理。理解这两个组件的工作原理有助于我们更好…

线程池在接受到30个比较耗时的任务时的状态,在前面30个比较耗时的任务还没执行完成的情况下,再来多少个任务会触发拒绝策略?

目录 一、提出问题 二、解答 问题 1: 线程池在接受到30个比较耗时的任务时的状态 问题 2: 在前面30个比较耗时的任务还没执行完成的情况下,再来多少个任务会触发拒绝策略? 总结 一、提出问题 我们首先自定义一个线程池: new ThreadPoo…

【开端】基于nginx部署的具有网关的web日志分析

一、绪论 基于nginx部署的具有网关的web日志分析,我们可以分析的日志有nginx的access.log ,网关的日志和应用的日志 二、日志分析 1、nginx日志 参数 说明 示例 $remote_addr 客户端地址 172.17.0.1 $remote_user 客户端用户名称 -- $time_lo…

【零知识证明】Groth16

一 相关介绍 1 Groth16 Groth16是一种用于零知识证明系统中的简洁非交互式知识论证(SNARK)协议,是一种表示计算的方式,在算术电路上操作,使用加法和乘法门。使用配对友好的椭圆曲线来实现高效的证明生成和验证。 Groth16的主要特点包括: …

机器学习之实战篇——预测二手房房价(线性回归)

机器学习之实战篇——预测二手房房价(线性回归) 前言数据集和实验文件下载相关文章推荐实验过程导入相关模块数据预处理手动梯度下降训练使用scikit-learn随机梯度下降 前言 实验中难免有许多缺陷和错误,望批评指正! 数据集和实验文件下载 …

Python进阶————面向对象高级

面向对象高级 前言一、继承1.1. 单继承1.2. 多继承1.3. 方法重写1.4. 子类调用父类方法1.4.1 父类名.父类方法名()1.4.2 super().父类方法名() 1.5. 多层继承 二、封装2.1. 私有属性2.2. 私有方法 三、多态3.1. 多态的条件3.2. 多态的定义 四、面向对象的其他特性4.1. 对象属性…

【C++ Primer Plus习题】8.6

问题: 解答: #include <iostream> using namespace std;template <typename T> T maxn(T arr[], int len)//通用 {T max 0;for (int i 0; i < len; i){if (max < arr[i]){max arr[i];}}return max; }template<> const char* maxn<const char*&g…