# 练习 5:`cat`
> 原文:[Exercise 5: cat](https://learncodethehardway.org/more-python-book/ex5.html)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
做完练习 4,你开始了解阻碍你的东西。spike 研究是一个简单的挑战,即如何从用户获取命令行参数。练习的真正目的是记录实验笔记,了解你需要做什么来开始。你有没有发现需要改变的东西?任何奇怪的习惯或配置问题?在这个练习中,你将创建一个名为`cat`的简单命令的副本,但你的真正目的是选择一件事来更改你的配置,以便你更快入门。记住,关键不是你的`cat`的实现。而是你的起步有多快,以及在45分钟内做一些有用的事情。
与以前的练习一样,坚持45分钟的最后期限。为你在练习上花费多少时间设置限制,是让你进入编码模式的有用技巧。事实上,如果你每天花45分钟的时间来热身,这是今后的理想实践。在你可以做到它之前,你需要一个更好的开始,所以找到你今天破除的障碍,让我们开始吧。
> 警告
> 我会再说一次,使之更清楚:你不能在这个练习中失败。如果你将45分钟的限制看做一个分级练习,并存在你应该或不应该做的有多好的任何期望,那么你就错了。理解这 45 分钟的最佳方式是,它仅仅是一个机制,在后面踢你,让你往前走。这不是一个考验。我重申,这不是一个考验。不断告诉自己,放松下来,尽管去做吧。
## 挑战练习
`cat`命令是“链接”的缩写,它最常用于将文件的内容转储到屏幕上。这样使用:
```
cat somefile.txt
```
该命令输出`somefile.txt`的内容。这实际上并不是原始目的。最初是用于组合多个文件 - 因此它被称为`cat`。为此,只需将每个文件添加到`cat`:
```
cat A.txt B.txt C.txt
```
然后,`cat`命令遍历每个文件,将其内容输出出来,然后在遍历完所有文件时退出。问题是,这怎么能连接文件?为此,还需要使用终端中找到的 POSIX 文件重定向功能:
```
cat A.txt B.txt C.txt> D.txt
```
你应该熟悉`>`符号的用法,如果不是,那么你需要复习基本的 Unix shell 操作。它只需要`cat`命令的标准输出(在这种情况下,它是`A.txt B.txt C.txt`的全部内容组合),并将其写入右侧的`D.txt`文件。
你需要尽快重新实现`cat`命令,使用你从练习 4 中学到的命令行参数。请记住,要执行标准输出,只需使用 Python 中的`print`即可。要了解更多有关`cat`的信息,请使用`man`命令:
```
man cat
```
这是`cat`命令的手册,在45分钟内,你可以得到尽可能多的实现奖励积分。
## 答案
你可以在 github 的 <http://bit.ly/lmpthwsolve> 仓库中找到我的解决方案。它在`ex5/`中,你会看到我完成了一个相当简单和肮脏的解决方案。如果你开始这个练习并且担心质量或创造力,那么你这样做是错误的。你的任务是马虎,快速,使之完成。时间限制的关键是,让你摆脱这个想法,每次按下键盘,都必须写出完美的代码来崇拜。尽你所能去做,然后之后你可以分析它并看到改进的地方。
## 研究性学习
+ 有没有任何`cat`的惊人功能,你从未使用或难以实现?
+ 你能从你的启动流程中破除一个障碍嘛?这比实现`cat`更重要,所以如果你没有破除这个障碍,那么你需要再做一遍这个练习。
+ 你能找到更多阻碍你的东西吗?简单的事情,如你的颈椎病,因为你座位太低了?没有一个很好的键盘?你的精神状态怎么样?有没有你以为阻止你的东西?你能停止思考它们吗?
## 深入学习
这不是一本自助手册,我不会修改你的心智,但我发现,学习新事物的巨大障碍,不是主题,而是你的恐惧。如果在这个练习中发现,缺失的想法或恐惧让你无法开始,那么我建议你在实现 45 分钟的黑魔法之前,先花 10 分钟记录你感觉如何。写下你的恐惧,焦虑和感觉将表达他们,并帮助你了解,担心一些事情是非常不实际的,因为它们就像 45 分钟的黑魔法那样简单。尝试一下。你会感到惊讶的是,关于你的感觉的 10分钟的写作会改变你的感觉。
- 笨办法学 Python · 续 中文版
- 引言
- 第一部分:预备知识
- 练习 0:起步
- 练习 1:流程
- 练习 2:创造力
- 练习 3:质量
- 第二部分:简单的黑魔法
- 练习 4:处理命令行参数
- 练习 5:cat
- 练习 6:find
- 练习 7:grep
- 练习 8:cut
- 练习 9:sed
- 练习 10:sort
- 练习 11:uniq
- 练习 12:复习
- 第三部分:数据结构
- 练习 13:单链表
- 练习 14:双链表
- 练习 15:栈和队列
- 练习 16:冒泡、快速和归并排序
- 练习 17:字典
- 练习 18:性能测量
- 练习 19:改善性能
- 练习 20:二叉搜索树
- 练习 21:二分搜索
- 练习 22:后缀数组
- 练习 23:三叉搜索树
- 练习 24:URL 快速路由
- 第四部分:进阶项目
- 练习 25:xargs
- 练习 26:hexdump
- 练习 27:tr
- 练习 28:sh
- 练习 29:diff和patch
- 第五部分:文本解析
- 练习 30:有限状态机
- 练习 31:正则表达式
- 练习 32:扫描器
- 练习 33:解析器
- 练习 34:分析器
- 练习 35:解释器
- 练习 36:简单的计算器
- 练习 37:小型 BASIC
- 第六部分:SQL 和对象关系映射
- 练习 38:SQL 简介
- 练习 39:SQL 创建
- 练习 40:SQL 读取
- 练习 41:SQL 更新
- 练习 42:SQL 删除
- 练习 43:SQL 管理
- 练习 44:使用 Python 的数据库 API
- 练习 45:创建 ORM
- 第七部分:大作业
- 练习 46:blog
- 练习 47:bc
- 练习 48:ed
- 练习 49:sed
- 练习 50:vi
- 练习 51:lessweb
- 练习 52:moreweb