练习 48:ed

原文:Exercise 48: ed

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

如果你的流程生效了,那么你应该能够专注于较长的项目,一次几个星期。在这个项目中,你的目标是创建尽可能精确的ed命令副本。这个练习的目标是不要有创意,而是要系统地实现另一个软件的精确副本。将其看作一个伪造的练习。你会做出一些非常好的东西,你可以用它代替原来的ed,没有人会知道。

这项工作是创建ed命令的“代码大师副本”,尽可能准确,也就是说,你的测试套件应该对真正的ed和你的版本运行同一脚本,来比较输出。这就像你在学习算法时所做的“代码大师副本”练习,除了你复制现有软件的行为,而不是试图记住它。这个流程是相似的,但你可以使用测试套件帮助它更快地进行。

挑战练习

ed工具,是现存的最早的 Unix 文本编辑器之一,坦率地说,它非常糟糕。实际上我无法想像有人使用ed编辑文本,因为它是目前最受用户讨厌的软件之一。如果你无法想象,在 Unix 的黑暗时期,有多少计算机出了故障,制作一个ed的副本会让你见识一下。

ed的一些概念是,虽然它支持脚本,但它最初是以交互方式使用的。就像用于文本文件的 MUD。你首先运行ed,它以命令模式启动,让你可以使用命令修改文本。当你执行需要输入的命令时,它将进入输入模式,直到该命令结束。你也必须知道行的地址来编辑它。这似乎是一种痛苦,但与其他文字编辑器相比,这是独角兽的魔法。

为了完成你的ed副本,你需要严重依赖于 Python 的re库,来使用正则表达式。我们在练习 31 中使用了这个库,所以通常你应该熟悉它和 RegEx。

我还建议你,在 45 分钟的会话内,尝试使用ed,来你的ed项目编写一些代码。这样做的痛苦将会教你如何复制它。

除此之外,你将需要阅读man ed页面来获取命令的基础知识,并可能会观看它的使用教程。一个很好的起步就是,在线寻找不同的示例脚本,并尝试将它们作为你的第一个测试用例。

我会给你一个线索,你需要使用 FSM 来处理ed命令的模态本质。

研究性学习

  • 查找 GNU ed的源代码,即使你不懂得 C 语言,也看一看它。
  • 将你的ed实现变成一个模块,然后可以在其他项目中使用。你需要将其用于以后的练习。
  • 永远不要再做这样的软件,除非你就是无聊了。

笨办法学 Python · 续 练习 48:`ed`相关推荐

  1. 笨办法学 Python · 续 中文版

    笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓 ...

  2. 笨办法学 Python · 续 练习 33:解析器

    练习 33:解析器 原文:Exercise 33: Parsers 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 想象一下,你将获得一个巨大的数字列表,你必须将其输入到电子表格 ...

  3. 笨办法学 Python · 续 练习 0:起步

    练习 0:起步 原文:Exercise 0: The Setup 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你需要设置和配置一些工具来学习此书.有可能你已经有了很多这些东西 ...

  4. 笨办法学 Python · 续 第二部分:简单的黑魔法

    第二部分:简单的黑魔法 原文:Part II: Quick Hacks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你有最好的想法,你会打动世界!你会成为一个亿万富豪!你的大 ...

  5. 笨办法学 Python · 续 练习 52:`moreweb`

    练习 52:moreweb 原文:Exercise 52: moreweb 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 现在,你已经使用 Python http.server ...

  6. 笨办法学 Python · 续 练习 24:URL 快速路由

    练习 24:URL 快速路由 原文:Exercise 24: Fast URL Search 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我们将结束数据结构和算法的部分,并将 ...

  7. 笨办法学 Python · 续 练习 32:扫描器

    练习 32:扫描器 原文:Exercise 32: Scanners 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我的第一本书在练习 48 中非常偶然涉及到了扫描器,但现在我 ...

  8. 笨办法学 Python · 续 练习 50:`vi`

    练习 50:vi 原文:Exercise 50: vi 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你有一个模块,实现了ed和sed中使用的功能.显然,下一步是实现世界历史上 ...

  9. 笨办法学 Python · 续 练习 49:`sed`

    练习 49:sed 原文:Exercise 49: sed 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 当你学习如何制作快速而简陋的黑魔法时,你在练习 9 中实现了一个&qu ...

最新文章

  1. 15.python操作mysql
  2. ITOO4.1之缓存—分布式缓存Memcached学习(理论篇)
  3. Spring Boot 核心配置文件详解
  4. Silverlight 打印
  5. 从案例角度解析建模平台动态规则引擎
  6. oracle的oradata,Oracle使用oradata恢复数据库
  7. oracle堆,oracle被一堆insert和update堵死解决方案
  8. Mac Supervisor 管理进程
  9. python __init__.py的作用是什么?
  10. 点石成金:访客至上的网页设计秘笈(原书第2版) 中文PDF版
  11. java520.1314表白_520表白套路对话大全 表白算式521.1314大全
  12. npm i 安装依赖 报错 npm ERR! code EINTEGRITY npm ERR! sha512-*****==.(12008 bytes) 问题处理
  13. 让创意设计更加简单:在线设计平台Canva登陆中国
  14. 基于免费的SDCC开发51单片机
  15. 使用 Envoy 和 AdGuard Home 阻挡烦人的广告
  16. python test suite什么意思_如何:在python中设置testsuite
  17. [git]fatal: unable to read config file 'xxx/.gitconfig': No such file or directory
  18. 1016: 银行利率 Python
  19. 安利 Access denied for user root @ localhost错误
  20. SAP系统核心模块都有哪些?

热门文章

  1. (18)System Verilog运算精度补齐示例
  2. android 图片剪切组件,Android 图片裁剪库 uCrop
  3. bpython_Python机器学习(入门)
  4. STM32F103:一.(4)JWAG功能IO复用
  5. 12. GD32F103C8T6入门教程-定时器-3路pwm输出
  6. 数据结构之栈的应用(语法匹配)
  7. linux input输入子系统分析《一》:初识input输入子系统
  8. 菜鸟学习笔记:Java提升篇12(Java动态性2——动态编译、javassist字节码操作)
  9. 《深入理解分布式事务》第三章 Spring 事务的实现原理
  10. 【LeetCode】剑指 Offer 60. n个骰子的点数