热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《Python3程序开发指南(第2版•修订版)》——1.5练习

本节书摘来自异步社区《Python3程序开发指南(第2版•修订版)》一书中的第1章,第1.5节,作者[英]MarkSumme

本节书摘来自异步社区《Python 3程序开发指南(第2版•修订版)》一书中的第1章,第1.5节,作者[英]Mark Summerfield,王弘博,孙传庆 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.5 练习

在本书的每一章最后,都有一节练习,设置练习的目的是鼓励读者对Python进行实践,获取实际经验,以助于吸收每章中所学的知识。本节包括的实例与练习既涉及数字处理,也涉及文本处理,以便尽可能满足更多读者的需求。此外,这些实例与练习都有非常小的代码规模,以便于读者将重点和注意力集中于学习与思考,而不是仅仅输入代码。本书的实例中,为每个练习都提供了一个解决方案。

1.bigdigits.py程序的一个变形,不再打印*,而是打印具体的数字。例如:

bigdigits_ans.py 719428306
77777 1 9999 4 222 888 333 000 6667 11 9 9 44 2 2 8 8 3 3 0 0 67 1 9 9 4 4 2 2 8 8 3 0 0 67 1 9999 4 4 2 888 33 0 0 66667 1 9 444444 2 8 8 3 0 0 6 6
7 1 9 4 2 8 8 3 3 0 0 6 6
7 111 9 4 22222 888 333 000 666

可以采取两种方法。最简单的方法只是简单地改变列表中的,但这种方法太过死板,也不是你应该采取的方法。读者应该采取的方法是,改变处理代码,不再将每个数字的行字符串一次性地添加到行,而是逐个字符添加,遇到时,就使用相关的数字替代。

为实现上述方法,可以复制本章中讲解的bigdigits.py,并修改其中大概5行,这些工作并不难,但稍有些微妙之处。对于这一练习题,提供了解决方案bigdigits_ans.py。

2.IDLE可以用作一个功能非常强大而灵活的计算器,但有时候,针对特定任务的计算器也是有用的。创建一个程序,该程序提示用户在while循环中输入数值,并根据输入的数值逐步构建一个列表。用户结束输入(按Enter键)时,打印出输入的数值本身、输入数值个数、输入数值和、输入的最小值与最大值以及平均值(sum/count),下面给出一个运行实例:

average1_ans.py
enter a number or Enter to finish: 5
enter a number or Enter to finish: 4
enter a number or Enter to finish: 1
enter a number or Enter to finish: 8
enter a number or Enter to finish: 5
enter a number or Enter to finish: 2
enter a number or Enter to finish:
numbers: [5, 4, 1, 8, 5, 2]
count = 6 sum = 25 lowest = 1 highest = 8 mean = 4.16666666667

要完成这一程序,需要大约4行代码初始化必要的变量(空列表使用[]表示),少于15行代码实现while循环,包括基本的错误处理,最后打印相关结果也可以在几行代码中实现,因此,整个程序(包括为代码清晰添加的空白行)应该在25行左右。

3.有些情况下,我们需要生成测试文本——比如,在网站真实内容可用之前,生成一个Web站点的设计方案,或者在开发报告写入者之前提供测试内容。为这一目的,可以编写一个用于生成可怕的诗歌(那种让Vogon都自愧不如的诗歌)的程序。

创建一些词汇列表,比如,冠词("the"、"a"等)、主题("cat"、"dog"、"man"、"woman")、动词("sang"、"ran"、"jumped")与状语("loudly"、"quietly"、"well"、"badly")等,之后循环5次,在每次迭代中,使用random.choice()函数选取冠词、主题、动词、状语等内容。使用random.randint()函数在两种语句结构之间进行选择:冠词、主题、动词、状语;只包括冠词、主题与动词,之后打印语句,下面给出了一个运行的实例:

awfulpoetry1_ans.py
another boy laughed badly
the woman jumped
a boy hoped
a horse jumped
another man laughed rudely

为实现上述功能,你需要导入random模块。列表部分大概需要4~10行代码完成,具体代码量依赖于在其中放置多少词汇;循环本身需要不到10行代码,加上一些必要的空白行,整个程序代码量大约在20行左右。对于这一练习题,提供了解决方案awfulpoetry1_ans.py。

4.为了使得产生可怕诗歌的程序功能更丰富,可以向其中添加一些代码,以便于用户在命令行上输入一个数字(在1与10之间)时,程序将输出该数字代表的行数。如果没有给定命令行参数,默认就像以前一样打印5行。为了完成上述任务,需要改变主循环(比如,变为一个while循环)。要记住的是,Python的比较操作符可以结链,因此,在检查某参数是否在范围内时,并不需要使用逻辑and操作符。添加这些额外的功能,大概需要10行代码。对于这一练习题,提供了解决方案awfulpoetry2_ans.py.

5.对于练习2,如果可以计算中间值以及平均值,那么应该是一个不错的功能。为了做到这一点,我们必须对列表进行排序。在Python中,列表可以很容易地使用list.sort()方法排序,但是目前尚未讲解这方面的知识,因此这里不适用这种方法。使用一段对数列表排序的代码,扩展平均值计算程序——不需要太考虑性能问题,使用你能想到的最简单的方法即可。对列表排序后,如果列表有奇数个数据项,中间值就是中间那个数据项的值;如果列表有偶数个数据项,中间值就是两个中间项值的平均值。计算中间值,并将其与其他相关信息一起输出。

上面的要求还是相当棘手的,对不熟练的程序员更是如此。如果你已具备一些Python编程经验,可能仍然会感觉到有些棘手,尤其是要限定在使用本书到此为止讲解的相关知识。排序需要大约十几行代码,中间值计算(注意不能使用modulus操作符,因为本书尚未讲到)大约要4行代码。对于这一练习题,提供了解决方案average2_ans.py。



推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
author-avatar
神秘的穿越火线99_628
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有