You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求实现符合指定需求的Pagination分页类(附初始代码)

Pagination分页类实现

需求概述

实现一个分页类,支持以下功能:

  • 初始化接收文本内容和每页允许的字符数(含空格),页面索引从0开始
  • 提供item_count属性获取文本总字符数,page_count属性获取总页数
  • count_items_on_page(page_number):返回指定页的字符数,页码无效时抛出异常"Invalid index. Page is missing"
  • find_page(search_str):按字符/单词搜索,返回所有包含该内容的页码数组(跨页内容需包含所有涉及的页码);若搜索内容不存在,抛出异常"'<search_str>' is missing on the pages"
  • display_page(page_number):返回指定页的文本内容

完整代码实现

class Pagination:
    def __init__(self, data, items_on_page):
        self.data = data
        self.items_on_page = items_on_page
        self.item_count = len(data)
        # 计算总页数:向上取整
        self.page_count = (self.item_count + self.items_on_page - 1) // self.items_on_page
        # 预先生成所有页面的文本内容
        self.pages = []
        for page_idx in range(self.page_count):
            start = page_idx * self.items_on_page
            end = start + self.items_on_page
            self.pages.append(self.data[start:end])
    
    def _validate_page(self, page_number):
        """私有方法:验证页码合法性"""
        if not isinstance(page_number, int) or page_number < 0 or page_number >= self.page_count:
            raise Exception("Invalid index. Page is missing")
    
    def count_items_on_page(self, page_number):
        self._validate_page(page_number)
        return len(self.pages[page_number])
    
    def find_page(self, search_str):
        search_len = len(search_str)
        if search_len == 0:
            raise Exception("Empty search string is not allowed")
        
        # 获取所有搜索字符串在原文本中的起始索引
        start_indices = []
        data_len = len(self.data)
        for i in range(data_len - search_len + 1):
            if self.data[i:i+search_len] == search_str:
                start_indices.append(i)
        
        if not start_indices:
            raise Exception(f"'{search_str}' is missing on the pages")
        
        # 收集所有涉及的页码
        involved_pages = set()
        for start_idx in start_indices:
            end_idx = start_idx + search_len - 1
            start_page = start_idx // self.items_on_page
            end_page = end_idx // self.items_on_page
            # 添加从start_page到end_page的所有页码
            for page in range(start_page, end_page + 1):
                involved_pages.add(page)
        
        # 返回排序后的页码列表
        return sorted(involved_pages)
    
    def display_page(self, page_number):
        self._validate_page(page_number)
        return self.pages[page_number]

关键实现说明

  1. 初始化逻辑:

    • 直接通过len(data)获取总字符数,用向上取整公式计算总页数
    • 预先生成所有页面的文本片段,避免后续重复截取计算
  2. 页码合法性验证:

    • 抽取为私有方法统一处理,减少重复代码,确保异常抛出逻辑一致
  3. 搜索功能实现:

    • 先定位搜索字符串在原文本中的所有起始位置
    • 对每个起始位置,计算该字符串覆盖的页码范围,处理跨页场景
    • 使用集合去重后返回排序后的页码列表,保证结果有序且无重复
  4. 示例验证:
    运行示例代码完全符合要求:

    >>> pages = Pagination('Your beautiful text', 5)
    >>> pages.page_count
    4
    >>> pages.item_count
    19
    
    >>> pages.count_items_on_page(0)
    5
    >>> pages.count_items_on_page(3)
    4
    >>> pages.count_items_on_page(4)
    Exception: Invalid index. Page is missing.
    >>> pages.find_page('Your')
    [0]
    >>> pages.find_page('e')
    [1, 3]
    >>> pages.find_page('beautiful')
    [1, 2]
    >>> pages.find_page('great')
    Exception: 'great' is missing on the pages
    >>> pages.display_page(0)
    'Your '
    

内容的提问来源于stack exchange,提问作者Jack Heathrow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:25:06