1
0
mirror of https://github.com/apachecn/lmpythw-zh.git synced 2025-05-28 12:02:19 +00:00
lmpythw-zh/ex27.md
wizardforcel dcf1807eb0 ex27
2017-08-11 15:30:12 +08:00

50 lines
4.3 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.

# 练习 27`tr`
> 原文:[Exercise 27: tr](https://learncodethehardway.org/more-python-book/ex27.html)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
这个练习是继续学习 TDD又称“测试优先”风格的开发。知道如何这样编程很重要因为它在许多地方使用但如前所述它有其局限性。在实现`tr`命令时,您将再次使用 TDD 进行练习。要十分确定,你是先严格编写测试,然后是代码,然后再审计两个东西。
在上一个练习中,我让你逐步构建测试用例和代码。这通常是最不容易出错的开发方法,但它不能帮助您更好地分析自己的代码。在这个练习中,你会做一些略微不同的事情,因为我将会写一个完整的测试用例,进行审计,然后编写整个代码,进行审计,并通过运行测试来确认审计。
这意味着,在这个练习中你的流程是这样的:
+ 尝试编写大部分 TDD 测试用例。
+ 审计测试用例并确认它是否编写正确。
+ 运行测试以确保它们失败,但是查找任何语法错误。此时您不应该有语法错误。
+ 为测试用例编写代码,但不要运行测试。
+ 审计您的代码,并尝试在运行测试之前查看有多少缺陷。
您将在下一个练习中,使用此过程来跟踪您的审计技能、测试技能的指标,并更好地控制您编写代码的方式。
## 挑战练习
`tr`工具是翻译字符流的有效方式。尽管非常简单,它可以对字符做一些非常复杂的事情。例如,您可以使用`tr`,以一行代码,获取`history`中使用的单词的频率:
```
history | tr -cs A-Za-z '\n' | tr A-Z a-z | sort | uniq -c | sort -rn
```
似乎很炫酷,但是 Doug McIlroy 曾经使用这一行来辩称高德纳Donald Knuth编写的一个类似的程序太长。Knuth 的实现是“10页”从头开始构建一切。Doug 的一行只是使用标准的 Unix 工具来做同样的事情。这展示了 Unix 的管道工具的力量和`tr`的翻译文本的能力。
使用手册页和任何其他东西,弄清`tr`命令的作用。还有一个同名的 Python 项目,但是我会告诉你要避开它,直到你完成实现,所以你可以稍后再比较这个项目。同时不要忘记,为此你需要一个整体的项目,它应该是测试完成的 TDD 风格,就像我开始的描述的那样。
## 45 分钟的批判
我希望你继续使用45分钟的时间但是有一个对这种工作方式的很大批评你不能进入扩展的专注流程。在短时间内工作像这样在你需要处理大量工作的以及必须加快步伐时有所帮助。这种情况发生在工作真的很无聊没有乐趣的时候。我正在让你使用45分钟的时间块来加快自己的速度但是我们也会在稍后使用它们来收集一些指标有关如何在时间中工作来进行后续分析。
但我会提醒你,最好的编程是在专注的状态中完成的。这就是,你的注意力在几个小时之内高度集中,失去所有的时间感,直到凌晨 5 点,意识到你度过了一整夜。这种强烈的专注使编程对我来说非常愉快,但是当您对您正在做的事情很感兴趣时,它真的是可持续的。当您需要处理别人的糟糕的代码库时,这个现象往往不会发生。在这些情况下,您需要一个不同的策略,加快你的工作并让你摆脱困境,而不会损耗你的兴致。这就是 45 分钟的时间块的作用。
最后,建立你进入状态并集中精力几个小时的能力,一个方法是从短暂的时间开始,然后慢慢增加它们,直到你可以忍受更长的时间。继续使用 45 分钟的时间快,但是如果你只是忘乎所以,最后在最后几个小时内完成黑魔法,那么就玩的开心。没有人会说你做错了,这实际上是正常的。
## 研究性学习
+ 这种工作方式怎么样?你喜欢吗?尝试阐明为什么,然后阅读一些当前的 TDD 的文章或它的近亲行为驱动开发BDD
+ 你认为通过首先审计你的代码而不是逐步构建它,你发现了更多还是更少的缺陷?猜测它,然后写下来。