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

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

不过这节练习还是有些不同,你不需要运行它,取而代之,你需要将它导入到 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 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么对gRPC做负载均衡会很棘手?

在过去的几年中,随着微服务的增长,gRPC在这些较小的服务之间的相互通信中获得了很大的普及,在后台,gRPC使用http/2在同一连接和双工流中复用许多请求。使用具有结构化数据的快速,轻便的二进制协议作为服务之间的通信介质确实很有吸…

给新手程序猿的16个必备小妙招

写在前面: 这个文章核心并不是程序优化的具体技巧,而是拿到一个问题如何思考和利用工具的通用方法。比如即使我们不知道 profiler 这个东西,通过搜索"代码 每一行 时间"也可以很快知道有这样的工具叫做 profiler,并且学…

openkruise 缩容_Linus 本尊也来了!为什么 KubeCon 越来越火了?

原标题:Linus 本尊也来了!为什么 KubeCon 越来越火了?2015年11月,第一届 KubeCon 在美国旧金山开始的时候,还只是个200人的小会议,2019年的7月,KubeCon 第二次在中国举办,就有 3500 …

你可能不知道的C#语言特性

关键字 yield 通常用于迭代器中,向IEnumerable对象提供值或者结束迭代。 如: yield return expression; yield break; var 用于定义隐式类型的变量。 var i 5; var s "Hello"; 注意隐式类型(Implicitly typed)并不是…

c语言中文件如何插入数据,急求如何将下列C语言程序数据存储到文件中?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中。#include int n0;int rest[7][7]; //全局声明,以供全局调用int main(){void perm(int list[],int ,int );int …

python字符串设置字体_python怎么更改字符串后几位

python更改字符串后几位的方法:可以利用replace()函数来实现。replace()函数可以把字符串中的旧字符串替换成新字符串,并返回替换后的新字符串。具体使用方法如:【str.replace("is", "was")】。可以利用replace()函数来修…

使用 Tye 辅助开发 k8s 应用竟如此简单(二)

续上篇,这篇我们来进一步探索 Tye 更多的使用方法。本篇我们来了解一下如何在 Tye 中使用服务发现。服务发现 - 微服务开发不可缺少的部件 服务发现,就是新注册的这个服务模块能够及时的被其他调用者发现。不管是服务新增和服务删减都能实现自动发现。《…

程序猿的双十一最佳攻略

讲个恐怖故事 一年一度虐汪“光棍节”又来了 小天拍拍(不存在的)胸脯告诉大家 这个节日 我陪你们 买买买! 限时特惠专场 1 welcome 7天教你学会数学建模及Matlab编程 数学建模涉及的内容比较广泛,比如碎纸片问题中所涉及的图像识…

傅里叶变换音频可视化_HTML5如何实现音频可视化频谱跳动

本篇教程探讨了HTML5如何实现音频可视化频谱跳动&#xff0c;希望阅读本篇文章以后大家有所收获&#xff0c;帮助大家HTML5CSS3从入门到精通 。<html>HTML5音频可视化频谱跳动代码* {margin: 0;padding: 0;}#canvas {display: block;background: linear-gradient(135deg,…

android websocket封装,Android WebSocket 方案选型OkHttp

目前Android WebSocket 框架 主要包括:SocketIOJava-WebSocketOkHttp WebSocket一开始我首选的是采用SocketIO方案&#xff0c;因为考虑该方案封装接口好&#xff0c;提供异步回调机制&#xff0c;但和后端同事沟通发现目前客户端的SocketIO不支持ws wss协议, 所以无奈只能放弃…

关于Word中审阅的一个问题!

前两天&#xff0c;在帮一个杂志撰稿的过程中&#xff0c;有一个关于Word审阅的问题。&#xff08;以下内容以Word2007为例&#xff09; 本身&#xff0c;审阅的应用不算困难。 我们可以为文章添加“批注”&#xff0c;或是你的上级对文章进行修改&#xff0c;他们可以开启“审…

ASP.NET Core - 在ActionFilter中使用依赖注入

上次ActionFilter引发的一个EF异常,本质上是对Core版本的ActionFilter的知识掌握不够牢固造成的&#xff0c;所以花了点时间仔细阅读了微软的官方文档。发现除了IActionFilter、IAsyncActionFilter的问题&#xff0c;还有一个就是依赖注入在ActionFilter上的使用也是需要注意的…

魏尔斯特拉斯函数与分形图形的动画演示

一般人会直觉上认为连续的函数必然是近乎可导的。即使不可导&#xff0c;所谓不可导的点也必然只占整体的一小部分。根据魏尔斯特拉斯在他的论文中所描述&#xff0c;早期的许多数学家&#xff0c;包括高斯&#xff0c;都曾经假定连续函数不可导的部分是有限或可数的。这可能是…

大脚战场插件怎么关闭_PM工具栏插件:HonmToolBar

视频演示&#xff1a;问&#xff1a;HonmToolBar是一款什么样的插件&#xff1f;答&#xff1a;HonmToolBar是一款高度自由化的插件&#xff0c;用户可以自己增加宏文件按钮或者宏命令按钮。该插件类似工具栏&#xff0c;有水平和垂直两个工具栏。插件悬浮在PM图形窗口左上角&a…

android 导航 美国,变美了 Android N或用全新虚拟导航按键

原标题&#xff1a;变美了 Android N或用全新虚拟导航按键变美了 Android N或用全新虚拟导航按键【IT168 资讯】虽然距离谷歌Android N系统的发布已经有一段时间了&#xff0c;不过该系统目前仍旧属于内测阶段&#xff0c;短时间内仍难以迅速推广。另外也正是由于Android N正式…

唐骏的商业模式

唐骏曾把商业模式比作谈恋爱&#xff0c;其要抓住三个要点&#xff1a; 1、简单&#xff1a; 太多的环节很难让人接受&#xff0c;并且容易潜藏缺陷&#xff0c;一目了然最好不过&#xff01; 2、有创意&#xff1a; 一定要有自己独特的创意&#xff0c;一位跟随别人&#xff0…

python特性和属性_Python面向对象-类的特性及公私有属性 | 【韩涛博客】

构造函数 __init__ self.name name #属性&#xff0c;成员变量&#xff0c;字段 def sayhi() #方法&#xff0c;动态属性 公有属性 在类中直接定义的属性&#xff0c;大家都可以用 私有属性 __两个下划线定义&#xff0c;外部不可以访问&#xff0c;内部可以访问 class Role(o…

[Abp 源码分析]自动审计记录

点击上方蓝字关注我们0.简介Abp 框架为我们自带了审计日志功能&#xff0c;审计日志可以方便地查看每次请求接口所耗的时间&#xff0c;能够帮助我们快速定位到某些性能有问题的接口。除此之外&#xff0c;审计日志信息还包含有每次调用接口时客户端请求的参数信息&#xff0c;…

我的老公是枚码农

前两天看到一篇写程序员的爆文&#xff0c;虽然略显夸张&#xff0c;但也着实有趣。忽然想到身边人也是一枚码农&#xff0c;浑身上下也是浓厚的码农气息&#xff0c;遂也胡乱写了几笔&#xff0c;博君一笑&#xff0c;为了方便起见&#xff0c;就称其为“码农哥”。 1 码农哥还…

如何修复硬盘坏道?

首先需要先确认硬盘的坏道是逻辑坏道还是物理坏道。 方法很简单&#xff0c;在电脑刚启动时按“F8”键&#xff0c;选择“Command Prompt only”进入DOS模式。这种方法的操作系统必须为Windows95/98&#xff0c;若为Windows2000/XP/2003&#xff0c;请使用DOS启动盘启动。然后执…