练习 25 - 更更多练习 - 笨办法学Python3

练习 25 更更多练习

接下来我们要做更多包含函数和变量的练习,来确保你完全掌握这些东西。这个练习你应该能直接输入、拆解并理解。

不过,这个练习有一些不同,你不是运行它,而是要把它导入 Python 然后自己运行这个函数。

ex25.py

1   def break_words(stuff):
2       """This function will break up words for us."""
3       words = stuff.split(' ')
4       return words 
5
6   def sort_words(words):
7       """Sorts the words."""
8       return sorted(words) 
9
10  def print_first_word(words):
11      """Prints the first word after popping it off."""
12      word = words.pop(0)
13      print(word) 
14
15  def print_last_word(words):
16      """Prints the last word after popping it off."""
17      word = words.pop(-1)
18      print(word) 
19
20  def sort_sentence(sentence):
21      """Takes in a full sentence and returns the sorted words
22      words = break_words(sentence)
23      return sort_words(words) 
24
25  def print_first_and_last(sentence):
26      """Prints the first and last words of the sentence."""
27      words = break_words(sentence)
28      print_first_word(words)
29      print_last_word(words) 
30
31  def print_first_and_last_sorted(sentence):
32      """Sorts the words then prints the first and last one.""
33      words = sort_sentence(sentence)
34      print_first_word(words)
35      print_last_word(words)

首先,用 python3.6 ex25.py 来运行这个脚本,找出你出错的地方,并把它们改正过来。然后对照“你会看到”部分看看运行结果是否一样。

你会看到

在这个练习中我们要在 python3.6 翻译器(interpreter)里与 ex25.py 文件交互,之前我们在做计算的时候也交互过。你在终端里这样运行 python3.6(Windows 下直接输入 python):

$ python3.6
Python 3.6.0rc2 (v3.6.0rc2:800a67f7806d, Dec 16 2016, 14:12:21)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help " , "copyright" , "credits" or "license" for more info
>>>

你的输出结果应该和我的一样,你可以在提示符(即 > )后面输入 Python 代码,它会直接运行。我希望你用这种方式输入这个练习的每一行代码,然后看看会如何:

练习 25 会话

1   import ex25
2   sentence = "All good things come to those who wait."
3   words = ex25.break_words(sentence)
4   words
5   sorted_words = ex25.sort_words(words)
6   sorted_words
7   ex25.print_first_word(words)
8   ex25.print_last_word(words)
9   words
10  ex25.print_first_word(sorted_words)
11  ex25.print_last_word(sorted_words)
12  sorted_words
13  sorted_words = ex25.sort_sentence(sentence)
14  sorted_words
15  ex25.print_first_and_last(sentence)
16  ex25.print_first_and_last_sorted(sentence)

以下是交互模式下输入的结果:
练习 25 Python 会话

Python 3.6.0 (default, Feb 2 2017, 12:48:29)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwi 
Type "help", "copyright", "credits" or "license" for more informa
>>> import ex25
>>> sentence = "All good things come to those who wait."
>>> words = ex25.break_words(sentence)
>>> words
['All', 'good', 'things', 'come', 'to', 'those', 'who', 'wait.']
>>> sorted_words = ex25.sort_words(words)
>>> sorted_words
['All', 'come', 'good', 'things', 'those', 'to', 'wait.', 'who']
>>> ex25.print_first_word(words) 
All
>>> ex25.print_last_word(words) 
wait.
>>> words
['good', 'things', 'come', 'to', 'those', 'who']
>>> ex25.print_first_word(sorted_words) 
All
>>> ex25.print_last_word(sorted_words) 
who
>>> sorted_words
['come', 'good', 'things', 'those', 'to', 'wait.']
>>> sorted_words = ex25.sort_sentence(sentence)
>>> sorted_words
['All', 'come', 'good', 'things', 'those', 'to', 'wait.', 'who']
>>> ex25.print_first_and_last(sentence)
All 
wait.
>>> ex25.print_first_and_last_sorted(sentence)
All 
who

当你过完每一行,保证你能找到在 ex25.py 中运行的函数,并且理解了每个函数是如何运行的。如果你得到了不同的结果或者出现错误,你得把代码改正过来,然后退出 python3.6 ,重新进入。

附加练习

  1. 弄明白“你会看到”中各行的作用是什么,确保你理解你是如何在 ex25 模块中运行你的函数的。
  2. 试试输入 help(ex25) 以及 help(ex25.break_words)要在交互练习后输入,否则无法成功运行)。注意你是如何获取到关于这个模块的帮助的,以及帮助是如何放在 ex25 的每一个函数后面的 """ 字符串里的。 这些特殊的字符串被称为文件注释,我们会在后面看到更多。
  3. 输入 ex25. 很无聊,可以走个捷径:from ex25 import * ,意思就是从 ex25 导入所有东西,程序员总喜欢倒着说。打开一个新会话,看看你的函数会如何。
  4. 试着拆解你的文件,看看当你用它的时候,它在 Python 里是什么样的。你得先输入 quit() 来退出 python,再重新加载它。

常见问题

有些函数我什么都没打印出来。你可能有些函数忘了在后面输入 return。检查一遍你的代码,确保每一行都是对的。

当我输入 import ex25 之后,我收到了 -bash: import: command not found. 注意看“你会看到”部分我是怎么做的。我是在 Python 里面运行的,而不是在 Terminal,也就是说,你得先运行 Python。

当我输入 import ex25.py 时收到了这样的错误:ImportError: No module named ex25 不要在后面加 .py ,Python 知道文件是以 .py 结尾的,所以你只用输入 ex25 即可。

我运行的时候遇到了这个错误:SyntaxError: invalid syntax这意味着你漏掉了某些东西,比如少了一个 " 或者类似一对的符号。任何时候你只要收到这样的报错信息,你就从它提到的错的那行开始检查,看是不是所有字符都输入正确了,然后再回过头检查这一行上面的行是不是都输入正确了。

words.pop 函数是如何改变 words 变量的?这是个很复杂的问题,但是在本例中 words 是一个列表,正因为如此你可以给它一些命令。这就类似于当你操作文件和很多其他东西时候它们是如何运行的一样。

在函数里我什么时候应该用 print 而不是 return 呢?通过函数,return 能够给调用这个函数的那行代码返回一个结果,你可以把函数当成通过参数获取输入通过 return 返回输出。print 跟这个就完全不相关了,它只是把输出结果打印到终端。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容