线性查找表是很简单的数据结构和算法。网站的用户登录注册时是基本的功能。本文首先给出线性查找表的基本实现,然后给出在用户登录注册的程序流程图,并将线性查找表应用到用户查询这一具体任务,并基于 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 : list
The list of numbers to search through.
num : int
The number to search for in the list.
"""
for i, n in enumerate(num_list):
if n == num:
return i
return -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('查找的数不存在')
break
else:
print(f'查找的数存在,索引为{index}')
用户登录、注册程序
用户登录和注册这两个动作,都涉及线性查找:查找用户名是否存在。 可以应用上一节的代码,变量重命名即可, 思想是一致的。
流程图
技术点
获取用户输入,并且带提示信息:
name = input('请输入用户名')
判断用户名字是否存在:也就是线性表的查找
def find_user(self, name):
for index, user in enumerate(self.user_list):
if user.name == name:
return index
return -1
代码实现
class User:
def __init__(self, name, password):
self.name = name
self.password = password
class 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 index
return -1
def exists_user(self, name):
return self.find_user(name) >= 0
def 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