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

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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值