线性查找表是很简单的数据结构和算法。网站的用户登录注册时是基本的功能。本文首先给出线性查找表的基本实现,然后给出在用户登录注册的程序流程图,并将线性查找表应用到用户查询这一具体任务,并基于 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