1
0
mirror of https://github.com/apachecn/lmpythw-zh.git synced 2025-05-31 13:37:42 +00:00
lmpythw-zh/ex48.md
wizardforcel 01d4c796df ex48
2017-08-16 12:00:18 +08:00

36 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 练习 48`ed`
> 原文:[Exercise 48: ed](https://learncodethehardway.org/more-python-book/ex48.html)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
如果你的流程生效了,那么你应该能够专注于较长的项目,一次几个星期。在这个项目中,你的目标是创建尽可能精确的`ed`命令副本。这个练习的目标是不要有创意,而是要系统地实现另一个软件的精确副本。将其看作一个伪造的练习。你会做出一些非常好的东西,你可以用它代替原来的`ed`,没有人会知道。
这项工作是创建`ed`命令的“代码大师副本”,尽可能准确,也就是说,你的测试套件应该对真正的`ed`和你的版本运行同一脚本,来比较输出。这就像你在学习算法时所做的“代码大师副本”练习,除了你复制现有软件的行为,而不是试图记住它。这个流程是相似的,但你可以使用测试套件帮助它更快地进行。
## 挑战练习
`ed`工具,是现存的最早的 Unix 文本编辑器之一,坦率地说,它非常糟糕。实际上我无法想像有人使用`ed`编辑文本,因为它是目前最受用户讨厌的软件之一。如果你无法想象,在 Unix 的黑暗时期,有多少计算机出了故障,制作一个`ed`的副本会让你见识一下。
`ed`的一些概念是,虽然它支持脚本,但它最初是以交互方式使用的。就像用于文本文件的 MUD。你首先运行`ed`,它以命令模式启动,让你可以使用命令修改文本。当你执行需要输入的命令时,它将进入输入模式,直到该命令结束。你也必须知道行的地址来编辑它。这似乎是一种痛苦,但与其他文字编辑器相比,这是独角兽的魔法。
为了完成你的`ed`副本,你需要严重依赖于 [Python 的`re`库](https://docs.python.org/2/library/re.html),来使用正则表达式。我们在练习 31 中使用了这个库,所以通常你应该熟悉它和 RegEx。
我还建议你,在 45 分钟的会话内,尝试使用`ed`,来你的`ed`项目编写一些代码。这样做的痛苦将会教你如何复制它。
除此之外,你将需要阅读`man ed`页面来获取命令的基础知识,并可能会观看它的使用教程。一个很好的起步就是,在线寻找不同的示例脚本,并尝试将它们作为你的第一个测试用例。
>
> 我会给你一个线索,你需要使用 FSM 来处理`ed`命令的模态本质。
## 研究性学习
+ 查找 GNU `ed`的源代码,即使你不懂得 C 语言,也看一看它。
+ 将你的`ed`实现变成一个模块,然后可以在其他项目中使用。你需要将其用于以后的练习。
+ 永远不要再做这样的软件,除非你就是无聊了。