请求实现符合指定需求的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]
关键实现说明
初始化逻辑:
- 直接通过
len(data)获取总字符数,用向上取整公式计算总页数 - 预先生成所有页面的文本片段,避免后续重复截取计算
- 直接通过
页码合法性验证:
- 抽取为私有方法统一处理,减少重复代码,确保异常抛出逻辑一致
搜索功能实现:
- 先定位搜索字符串在原文本中的所有起始位置
- 对每个起始位置,计算该字符串覆盖的页码范围,处理跨页场景
- 使用集合去重后返回排序后的页码列表,保证结果有序且无重复
示例验证:
运行示例代码完全符合要求:>>> 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
相关产品推荐
相关产品推荐

