# 习题 25: 更多更多的练习¶

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

## 你应该看到的结果¶

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39``` ```\$ python Python 2.5.1 (r251:54863, Feb 6 2009, 19:02:12) [GCC 4.0.1 (Apple Inc. build 5465)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> 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. >>> wrods Traceback (most recent call last): File "", line 1, in NameError: name 'wrods' is not defined >>> 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 >>> ^D \$ ```

• 在第 5 行你将自己的 ex25.py 执行了 import，和你做过的其它 import 一样。在 import 的时候你不需要加 .py 后缀。这个过程里，你把 ex25.py 当做了一个“模组(module)”来使用，你在这个模组里定义的函数也可以直接调用出来。
• 第 6 行你创建了一个用来处理的“句子(sentence)”。
• 第 7 行你使用 ex25 调用你的第一个函数 ex25.break_words。其中的 . (dot, period)符号可以告诉 Python：“嗨，我要运行 ex25 里的哪个个叫 break_words 的函数！”
• 第 8 行我们只是输入 words，而 python 将在第 9 行打印出这个变量里边有什么。看上去可能会觉得奇怪，不过这其实是一个“列表(list)”，你会在后面的章节中学到它。
• 10-11 行我们使用 ex25.sort_words 来得到一个排序过的句子。
• 13-16 行我们使用 ex25.print_first_wordex25.print_last_word 将第一个和最后一个词打印出来。
• 第 17 行比较有趣。我把 words 变量写错成了 wrods，所以 python 在 18-20 行给了一个错误信息。
• 21-22 行我们打印出了修改过的词汇列表。第一个和最后一个单词我们已经打印过了，所以在这里没有再次打印出来。

## 加分习题¶

1. 研究答案中没有分析过的行，找出它们的来龙去脉。确认自己明白了自己使用的是模组 ex25 中定义的函数。
2. 试着执行 help(ex25)help(ex25.break_words) 。这是你得到模组帮助文档的方式。 所谓帮助文档就是你定义函数时放在 """ 之间的东西，它们也被称作 documentation comments （文档注解），后面你还会看到更多类似的东西。
3. 重复键入 ex25. 是很烦的一件事情。有一个捷径就是用 from ex25 import * 的方式导入模组。这相当于说：“我要把 ex25 中所有的东西 import 进来。”程序员喜欢说这样的倒装句，开一个新的会话，看看你所有的函数是不是已经在那里了。
4. 把你脚本里的内容逐行通过 python 编译器执行，看看会是什么样子。你可以执行CTRL-D (Windows 下是 CTRL-Z)来关闭编译器。

## 常见问题回答¶

.py 是不需要的。Python z知道文件是 .py 结尾，所以只要输入 import ex25 即可。

print 只是屏幕输出而已，你可以让一个函数既 print 又返回值。当你明白这一点后，你就知道这个问题其实没什么意义。如果你想要打印到屏幕，那就使用 print ，如果是想返回值，那就是用 return 。.