笨办法学 Python(练习题)
笨办法学 Python (Learn Python The Hard Way)中文版
习题 0: 准备工作
总有一天你会听到有程序员建议你使用 Mac OSX 或者 Linux。如果他喜欢字体美观,他会告诉你让你弄台 Mac OSX 计算机,如果他们喜欢操作控制而且留了一部大胡子,他会让你安装 Linux。这里再次向你说明,只要是一台手上能用的电脑就可以了。你需要的只有三样东西: gedit、一个命令行终端、还有python。
习题 1: 第一个程序
学会看调试错误
这些内容你应该学会看懂的,这是很重要的一点,因为你以后还会犯类似的错误。就是我现在也会犯这样的错误。让我们一行一行来看。
python
- 会打印出错误的行
- 指示错误的地方
- 指示错误的类型
习题 2: 注释和井号
程序里的注释是很重要的。它们可以用自然语言告诉你某段代码的功能是什么。
在你想要临时移除一段代码时,你还可以用注解的方式将这段代码临时禁用.
习题 3: 数字和数学计算
每一种编程语言都包含处理数字和进行数学计算的方法。不必担心,程序员经常撒谎说他们是多么牛的数学天才,其实他们根本不是。
如果他们真是数学天才,他们早就去从事数学相关的行业了,而不是写写广告程序和社交网络游戏,从人们身上偷赚点小钱而已。
习题 4: 变量(variable)和命名
在编程中,变量只不过是用来指代某个东西的名字。
程序员通过使用变量名可以让他们的程序读起来更像英语。
而且因为程序员的记性都不怎么地.
变量名可以让他们更容易记住程序的内容。如果他们没有在写程序时使用好的变量名,在下一次读到原来写的代码时他们会大为头疼的
习题 5: 更多的变量和打印
- 格式化字符串(format string)
- 试着使用更多的格式化字符。例如 %r 就是是非常有用的一个,它的含义是“不管什么都打印出来”。
习题 6: 字符串(string)和文本
字符串可以包含格式化字符 %s,这个你之前也见过的。你只要将格式化的变量放到字符串中,再紧跟着一个百分号 % (percent),再紧跟着变量名即可。
唯一要注意的地方,是如果你想要在字符串中通过格式化字符放入多个变量的时候,你需要将变量放到 ( ) 圆括号(parenthesis)中,而且变量之间用 ,逗号(comma)隔开。就像你逛商店说“我要买牛奶、面包、鸡蛋、八宝粥”一样,只不过程序员说的是”(milk, eggs, bread, soup)”。
习题 7: 更多打印
- 从现在开始,把你的错误记录下来,写在一张纸上。
- 在开始下一节习题时,阅读一遍你记录下来的错误,并且尽量避免在下个练习中再犯同样的错误。
- 记住,每个人都会犯错误。程序员和魔术师一样,他们希望大家认为他们从不犯错,不过这只是表象而已,他们每时每刻都在犯错。
习题 8: 打印,打印
习题 9: 打印,打印,打印
习题 10: 那是什么
- 使用反斜杠 \ (back-slash) 可以将难打印出来的字符放到字符串。针对不同的符号有很多这样的所谓“转义序列(escape sequences)”.
- 但有一个特殊的转义序列,就是 **双反斜杠(double back-slash) \\ **。这两个字符组合会打印出一个反斜杠来.
tabby_cat = "\tI'm tabbed in." #\t制表符
persian_cat = "I'm split\non a line." #\n换行符
backslash_cat = "I'm \\ a \\ cat." #2个\\显示1个\
fat_cat = """
I'll do a list:
\t* Cat food
\t* Fishies
\t* Catnip\n\t* Grass
"""
print tabby_cat
print persian_cat
print backslash_cat
print fat_cat
输出:
I'm tabbed in.
I'm split
on a line.
I'm \ a \ cat.
I'll do a list:
* Cat food
* Fishies
* Catnip
* Grass
习题 11: 提问
一般软件做的事情主要就是下面几条:
- 接受人的输入。
- 改变输入。
- 打印出改变了的输入。
注意到我在每行 print 后面加了个逗号(comma) , 了吧?这样的话 print 就不会输出新行符而结束这一行跑到下一行去了。
习题 12: 提示别人
习题 13: 参数、解包、变量
- 在第 1 行我们有一个“import”语句. 这是你将 python 的功能引入你的脚本的方法.
- Python 不会一下子将它所有的功能给你,而是让你需要什么就调用什么。
- 这样可以让你的程序保持精简,而后面的程序员看到你的代码的时候,这些“import”可以作为提示,让他们明白你的代码用到了哪些功能。
from sys import argv
script, first, second, third = argv
print ("The script is called:") , script
print ("Your first variable is:") , first
print ("Your second variable is:") , second
print ("Your third variable is:") , third
奇怪的结果
在pycharm里面运行命令行:
Run/Debug Configurations->Configurations->Script Parames
输出:
The script is called:
F:/2���/python/nesterjerrychan/chapter6/learnhardway/test.py
Your first variable is: first
Your second variable is: second
Your third variable is: third
习题 14: 提示和传递
习题 15: 读取文件
我使用了“命令”这个词,不过实际上它们的名字是“函数(function)”和“方法(method)。上网搜索一下这两者的意义和区别。看不明白也没关系,迷失在别的程序员的知识海洋里是很正常的一件事情。
习题 16: 读写文件
- close – 关闭文件。跟你编辑器的 文件->保存.. 一个意思。
- read – 读取文件内容。你可以把结果赋给一个变量。
- readline – 读取文本文件中的一行。
- truncate – 清空文件,请小心使用该命令。
- write(stuff) – 将stuff写入文件。
习题 17: 更多文件操作
文本1--->复制文本--->文本2
为什么每次需要output.close()?
1.把文件想象成信件就可以了,打开信封才能取出信纸,把信纸放入信封还要封好,不然随时可能掉出来.
2.如果没有close(),写入的内容可能会存在缓冲区中,并没有真正的写入文件里。
3.close()是为了释放资源。
如果不close(),那就要等到垃圾回收时,自动释放资源。垃圾回收的时机是不确定的,也无法控制的。
如果程序是一个命令,很快就执行完了,那么可能影响不大(注意:并不是说就保证没问题)。
但如果程序是一个服务,或是需要很长时间才能执行完,或者很大并发执行,就可能导致资源被耗尽,也有可能导致死锁。
习题 18: 命名、变量、代码、函数
函数可以做三样事情:
- 它们给代码片段命名,就跟“变量”给字符串和数字命名一样。
- 它们可以接受参数,就跟你的脚本接受 argv一样。
- 通过使用 #1 和 #2,它们可以让你创建“微型脚本”或者“小命令”。
创建函数过程:
- 告诉 Python 创建一个函数,def ,也就是“定义(define)”的意思。
- 紧接着 def 的是函数的名称。但最好函数的名称能够体现出函数的功能来。
习题 19: 函数和变量
函数里边的变量和脚本里边的变量之间是没有连接的
习题 20: 函数和文件
习题 21: 函数可以返回东西
习题 22: 到现在你学到了哪些东西?
做这节练习没有失败,只有尝试,请牢记这一点。
习题 23: 读代码
习题 24: 更多练习
老程序员的建议
在这么久的旅程下来我的体会是:编程语言这东西并不重要,重要的是你用这些语言做的事情。事实上我一直知道这一点,不过以前我会周期性地被各种编程语言分神而忘记了这一点。现在我是永远不会忘记这一点了,你也不应该忘记这一点。
你学到和用到的编程语言并不重要。不要被围绕某一种语言的宗教把你扯进去,这只会让你忘掉了语言的真正目的,也就是作为你的工具来实现有趣的事情。
编程作为一项智力活动,是唯一一种能让你创建交互式艺术的艺术形式。你可以创建项目让别人使用,而且你可以间接地和使用者沟通。没有其他的艺术形式能做到如此程度的交互性。电影领着观众走向一个方向,绘画是不会动的。而代码却是双向互动的。
技术公司里边会编程的人多到一毛钱一打,根本得不到什么尊敬。而在生物学、医药学、政府部门、社会学、物理学、数学等行业领域从事编程的人就能得到足够的尊敬,而且你可以使用这项技能在这些领域做出令人惊异的成就。