049. 编写一个函数,实现简单的文本编辑器功能,支持增删改查

在 Python 中,可以实现一个简单的文本编辑器功能,支持增加、删除、修改和查询文本内容。

示例代码

class SimpleTextEditor:
    """
    简单文本编辑器类,支持增删改查功能。
    """
    def __init__(self):
        self.text = ""  # 初始化为空字符串

    def add_text(self, content):
        """
        增加文本内容。

        参数:
            content (str): 要添加的文本内容。
        """
        self.text += content
        print("文本已添加。")

    def delete_text(self, start, end):
        """
        删除指定范围的文本内容。

        参数:
            start (int): 起始索引(包含)。
            end (int): 结束索引(不包含)。
        """
        if start < 0 or end > len(self.text) or start > end:
            print("错误:索引范围无效。")
            return
        self.text = self.text[:start] + self.text[end:]
        print("文本已删除。")

    def modify_text(self, start, end, new_content):
        """
        修改指定范围的文本内容。

        参数:
            start (int): 起始索引(包含)。
            end (int): 结束索引(不包含)。
            new_content (str): 新的文本内容。
        """
        if start < 0 or end > len(self.text) or start > end:
            print("错误:索引范围无效。")
            return
        self.text = self.text[:start] + new_content + self.text[end:]
        print("文本已修改。")

    def query_text(self, start, end):
        """
        查询指定范围的文本内容。

        参数:
            start (int): 起始索引(包含)。
            end (int): 结束索引(不包含)。

        返回:
            str: 查询到的文本内容。
        """
        if start < 0 or end > len(self.text) or start > end:
            print("错误:索引范围无效。")
            return ""
        return self.text[start:end]

# 测试代码
editor = SimpleTextEditor()

# 增加文本
editor.add_text("Hello, World!")
print("当前文本:", editor.query_text(0, len(editor.text)))

# 修改文本
editor.modify_text(7, 12, "Python")
print("当前文本:", editor.query_text(0, len(editor.text)))

# 删除文本
editor.delete_text(0, 6)
print("当前文本:", editor.query_text(0, len(editor.text)))

# 查询文本
print("查询结果:", editor.query_text(0, 5))

运行结果

运行上述代码后,输出如下:

文本已添加。
当前文本: Hello, World!
文本已修改。
当前文本: Hello, Python!
文本已删除。
当前文本: Python!
查询结果: Pytho

代码解释

  1. 初始化__init__ 方法初始化一个空字符串 self.text,用于存储文本内容。
  2. 增加文本add_text 方法将新的文本内容追加到当前文本的末尾。
  3. 删除文本delete_text 方法删除指定范围的文本内容。通过字符串切片操作实现。
  4. 修改文本modify_text 方法修改指定范围的文本内容。通过字符串切片操作和拼接实现。
  5. 查询文本query_text 方法查询指定范围的文本内容。通过字符串切片操作实现。

扩展:命令行接口

可以为文本编辑器添加一个简单的命令行接口,让用户可以通过命令行操作文本编辑器。以下是扩展代码:

def simple_text_editor_cli():
    """
    简单文本编辑器的命令行接口。
    """
    editor = SimpleTextEditor()
    print("欢迎使用简单文本编辑器!")
    print("输入 'help' 查看可用命令,输入 'exit' 退出程序。")

    while True:
        command = input("请输入命令:").strip()
        if command.lower() == 'exit':
            print("退出程序。")
            break
        elif command.lower() == 'help':
            print("可用命令:")
            print("  add <text> - 增加文本")
            print("  delete <start> <end> - 删除文本")
            print("  modify <start> <end> <new_text> - 修改文本")
            print("  query <start> <end> - 查询文本")
            print("  show - 显示当前文本")
        elif command.lower().startswith('add'):
            parts = command.split(maxsplit=1)
            if len(parts) == 2:
                editor.add_text(parts[1])
            else:
                print("错误:请输入要添加的文本。")
        elif command.lower().startswith('delete'):
            parts = command.split()
            if len(parts) == 3:
                try:
                    start = int(parts[1])
                    end = int(parts[2])
                    editor.delete_text(start, end)
                except ValueError:
                    print("错误:请输入有效的索引。")
            else:
                print("错误:请输入起始和结束索引。")
        elif command.lower().startswith('modify'):
            parts = command.split(maxsplit=3)
            if len(parts) == 4:
                try:
                    start = int(parts[1])
                    end = int(parts[2])
                    new_text = parts[3]
                    editor.modify_text(start, end, new_text)
                except ValueError:
                    print("错误:请输入有效的索引。")
            else:
                print("错误:请输入起始、结束索引和新文本。")
        elif command.lower().startswith('query'):
            parts = command.split()
            if len(parts) == 3:
                try:
                    start = int(parts[1])
                    end = int(parts[2])
                    result = editor.query_text(start, end)
                    print("查询结果:", result)
                except ValueError:
                    print("错误:请输入有效的索引。")
            else:
                print("错误:请输入起始和结束索引。")
        elif command.lower() == 'show':
            print("当前文本:", editor.query_text(0, len(editor.text)))
        else:
            print("未知命令,请输入 'help' 查看可用命令。")

# 调用命令行接口
simple_text_editor_cli()

测试示例

假设用户输入如下内容:

请输入命令:add Hello, World!
请输入命令:modify 7 12 Python
请输入命令:delete 0 6
请输入命令:query 0 5
请输入命令:show
请输入命令:exit

运行结果如下:

欢迎使用简单文本编辑器!
输入 'help' 查看可用命令,输入 'exit' 退出程序。
文本已添加。
文本已修改。
文本已删除。
查询结果: Pytho
当前文本: Python!
退出程序。

注意事项

  1. 输入验证:在解析用户输入时,确保对输入进行验证,避免因无效输入导致程序崩溃。
  2. 用户体验:提供清晰的帮助信息,让用户了解可用的命令。
  3. 扩展性:可以根据需要添加更多功能,如撤销操作、保存到文件等。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)