我们将做一些关于函数和变量的练习,以确认你真正掌握了这些知识。这节练习对你来说可以说是一本道:写程序,逐行研究,弄懂它。

不过这节练习还是有些不同,你不需要运行它,取而代之,你需要将它导入到 python 里通过自己执行函数的方式运行。

# -*- coding:utf-8 -*-

def break_words(stuff):

"""This function will break up words for us."""

words = stuff.split(' ')

#将指定字符串进行分割 以空格为标志分割字符串,默认全部分割,可以在括号里”后面指定参数以使解释器按规定次数分割。

return words

def sort_words(words):

#以字母表顺序为依据将words变量所包含的字符串中的英文单词进行排序,英文句号在该过程中将被舍弃。

"""Sorts the words."""

return sorted(words)

#sorted 排序

def print_first_word(words):

"""Prints the first word afteer popping it off."""

word = words.pop(0)

#弹出一个元素后关闭,括号内的参数表示弹出元素的位置。0代表第一个,-1代表最后一个。

# 暂不清楚单位是不是之前类似的字节,之前碰到位置参数时,数字代表的是第几个字节数。请记住这种用法,也记住这个疑问。

return word

def print_last_word(words):

"""Prints the last word after popping it off."""

word =words.pop(-1)

return word

def sort_sentence(sentence):

"""Takes in a full sentence and returns the sorted wordd."""

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)

return print_first_word(words)

return 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)

return print_first_word(words)

return print_last_word(words)

sentence = 'All good things come to those who wait'

words = break_words(sentence)

print words

sorted_words = sort_words(words)

print sorted_words

print print_first_word(words)

print print_last_word(words)

print words

print print_first_word(sorted_words)

print print_last_word(sorted_words)

print sorted_words

sorted_words = sort_sentence(sentence)

print sorted_words

print print_first_and_last(sentence)

print print_first_and_last_sorted(sentence)

结果

['All', 'good', 'things', 'come', 'to', 'those', 'who', 'wait']

['All', 'come', 'good', 'things', 'those', 'to', 'wait', 'who']

All

wait

['good', 'things', 'come', 'to', 'those', 'who']

All

who

['come', 'good', 'things', 'those', 'to', 'wait']

['All', 'come', 'good', 'things', 'those', 'to', 'wait', 'who']

All

All

我们来逐行分析一下每一步实现的是什么:

�6�1 在第 5 行你将自己的 ex25.py 执行了 import ,和你做过的其它 import 一样。在 import 的时候你不需要加 .py 后缀。这个过程里,你把 ex25.py 当做了一个“模组 (module)” 来使用,你在这个模组里定义的函数也可以直接调用出来。

�6�1 第 6 行你创建了一个用来处理的“句子 (sentence)” 。

�6�1 第 7 行你使用 ex25 调用你的第一个函数 ex25.break_words 。其中的 . (dot, period)符号可以告诉 Python :“嗨,我要运行 ex25 里的哪个个叫 break_words 的函数!”

�6�1 第 8 行我们只是输入 words ,而 python 将在第 9 行打印出这个变量里边有什么。看上去可能会觉得奇怪,不过这其实是一个“列表 (list)” ,你会在后面的章节中学到它。

�6�1 10-11 行我们使用 ex25.sort_words 来得到一个排序过的句子。

�6�1 13-16 行我们使用 ex25.print_first_word 和 ex25.print_last_word 将第一个和最后一个词打印出来。

�6�1 第 17 行比较有趣。我把 words 变量写错成了 wrods ,所以 python 在 18-20 行给了一个错误信息。

�6�1 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) 来关闭编译器。

常见问题回答

有的函数打印出来的结果是 None 。

也许你的函数漏写了最后的 return 语句。回到代码中检查一下是不是每一行都写对了。

输入 import ex15 时显示 -bash: import: command not found 。

注意看《你应该看到的结果》部分。我是在 Python 中写的这句,不是在命令行终端直接写的。你要先运行 python 再输入代码。

输入 import ex25.py 时显示 ImportError: No module named ex25.py 。

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

运行时提示 SyntaxError: invalid syntax 。

这说明你在提示的那行有一个语法错误,可能是漏了半个括号或者引号,也可能识别的。一旦看到这种错误,你应该去对应的行检查你的代码,如果这行没问题,就倒着继续往上检查每一行,直到发现问题为止。

函数里的代码不是只在函数里有效吗?为什么 words.pop(0) 这个函数会改变 words 的内容?

这个问题有点复杂,不过在这里 words 是一个列表,你可以对它进行操作,操作结果也可以被保存下来。这和你操作文件时文件的 f.readline() 工作原理差不多。

函数里什么时候该用 print ,什么时候该用 return ?

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

《笨办法学python》6_笨办法学Python 习题 25: 更多更多的练习相关推荐

  1. 笨办法学python 粗略笔记(learn python the hard way)

    笨办法学python 粗略笔记(learn python the hard way) 标签(空格分隔): python # _*_ coding: utf_8 _*_ ''' ### ex1 prin ...

  2. [IT学习]Learn Python the Hard Way (Using Python 3)笨办法学Python3版本

    黑客余弦先生在知道创宇的知道创宇研发技能表v3.1中提到了入门Python的一本好书<Learn Python the Hard Way(英文版链接)>.其中的代码全部是2.7版本. 如果 ...

  3. 笨方法学python 习题25

    更多更多的练习 先建立ex25.py 代码如下 运行代码如下: 结果如下: 巩固练习 Tips: 先建立ex25.py 代码如下 def break_words(stuff):"" ...

  4. 一般IT部门职能有两种模式:管办分离模式和管办合一模式

    一般IT部门职能有两种模式:管办分离模式和管办合一模式. 管办分离模式下,IT部门是个纯粹的技术部门,一般负责单位的信息化建设中长期规划.内部业务信息系统(OA.PDM.ERP.mail.--)开发( ...

  5. 新手学python用什么软件-初学 Python 需要安装哪些软件?

    自动配置.有效求助.协作编程.版本控制.一站式解决 Python 新手练习中的痛点. /> 痛点 这个学期,我在北得克萨斯大学(University of North Texas)教 INFO ...

  6. 学python需要安装什么-初学 Python 需要安装哪些软件?

    自动配置.有效求助.协作编程.版本控制.一站式解决 Python 新手练习中的痛点. /> 痛点 这个学期,我在北得克萨斯大学(University of North Texas)教 INFO ...

  7. python经典好书-有哪些 Python 经典书籍?

    内容太长,完整内容请访问原文: python 3.7极速入门教程9最佳python中文工具书籍下载 筛选了2年内优秀的python书籍,个别经典的书籍扩展到5年内. python现在的主流版本是3.7 ...

  8. python推荐书籍-有哪些 Python 经典书籍?

    内容太长,完整内容请访问原文: python 3.7极速入门教程9最佳python中文工具书籍下载 筛选了2年内优秀的python书籍,个别经典的书籍扩展到5年内. python现在的主流版本是3.7 ...

  9. 免费学python的网站-免费学习Python编程的3个优秀的网站资源

    用Python编写代码一点都不难,事实上它一直被赞誉为最容易学的编程语言.如果你准备学习web开发, Python是一个不错的开始,甚至想做游戏的话,用Python来开发游戏的资源也有很多.这是快速学 ...

  10. 学习python需要什么基础-学习python需要什么基础

    Python编程基础知识的学习最终目的是应用于项目中,因此,项目实战训练必不可少.下面小编给大家介绍学习python需要什么基础,一起来看看吧. 学习python需要掌握的基础 1.要有决心 做任何事 ...

最新文章

  1. Activiti——流程变量(六)
  2. 七夕节脱单“神助攻”!AI教你写情话
  3. 事务的四个特性-ACID
  4. 计算机端口封闭,如何查询局域网内被封的电脑端口?
  5. 盒子模型,top和margin-top
  6. 9.1-微操作命令的分析(学习笔记)
  7. 操作系统短作业优先(SJF)调度算法
  8. apache 配置虚拟目录
  9. JZOJ 1237. 餐桌
  10. mysql 多表并列查询_Mysql多表查询(两张独立表,一张关系表)
  11. $().index() 两种用法
  12. P3853 路标设置
  13. 【动画演示软件】Focusky教程 | 如何隐藏某帧的内容,使其在演示时才出现?
  14. This request has been blocked; the content must be served over HTTPS
  15. 网易之后再现暴力裁员,996、小黑屋、摄像头监控,你想象不到的残酷!
  16. Geek-10h-re-wp
  17. 西部数据助手mysql_户外摄影存储好助手 西部数据My Passport Wireless SSD测评
  18. 3dMAX安装异常 - 安装程序无法确定您当前的图形卡。这通常是由于通过远程桌面进行安装,或使用虚拟化软件所致。
  19. 计算机黑屏启动超慢,电脑开机很慢然后黑屏连不上网怎么办(新手可学的4种简单处理方法)...
  20. 快速备注一下IMSI和IMEI的区别

热门文章

  1. 【开源】OSharpNS,轻量级.net core快速开发框架发布
  2. ASP.NET Core 2.0 特性介绍和使用指南
  3. 互联网级监控系统必备-时序数据库之Influxdb集群及踩过的坑
  4. Vue 深度监听和初始绑定
  5. 两种方法清除Excel保护密码
  6. [转]npm生成的package.json文件中依赖项版本号前的波浪号(~)和插入符号(^)是啥意思?
  7. [转]Java学习路线图(完整详细2019版)
  8. C和指针之函数之归以字符形式按顺序打印数字的每位数字(递归和非递归)
  9. 《零基础看得懂的C++入门教程 》——(6)自己动手写个函数
  10. php基础教程 第十一步 面向对象补充