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

简介:

本节书摘来自异步社区《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     666
    7   11   9   9    44    2   2  8   8  3   3   0   0    6
   7     1   9   9   4 4    2   2   8  8      3  0    0   6
  7      1    9999  4  4      2     888     33   0    0   6666
 7       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。

相关文章
|
1天前
|
程序员 Linux C++
Python中的WinForms类桌面应用程序开发
Python中的WinForms类桌面应用程序开发
10 4
|
1天前
|
监控 开发者 Python
Python中记录程序报错信息的实践指南
Python中记录程序报错信息的实践指南
10 1
|
5天前
|
监控 测试技术 持续交付
Python自动化测试代理程序可用性
总之,通过编写测试用例、自动化测试和设置监控系统,您可以确保Python自动化测试代理程序的可用性,并及时发现和解决问题。这有助于提供更可靠和高性能的代理服务。
11 4
|
7天前
|
Python
简单的 Python 计算器程序
这是一个简单的Python计算器程序,实现了加、减、乘、除功能。用户选择运算类型及输入两个数字后,程序依据选择调用相应函数进行计算并显示结果。若输入非法,程序显示错误信息。
22 3
|
10天前
|
监控 测试技术 API
Python Web应用程序构建
【4月更文挑战第11天】Python Web开发涉及多种框架,如Django、Flask和FastAPI,选择合适框架是成功的关键。示例展示了使用Flask创建简单Web应用,以及如何使用ORM(如SQLAlchemy)管理数据库。
19 4
|
12天前
|
人工智能 数据库 开发者
Python中的atexit模块:优雅地处理程序退出
Python中的atexit模块:优雅地处理程序退出
10 3
|
14天前
|
存储 索引 Python
Python从入门到精通——1.3.1练习编写简单程序
Python从入门到精通——1.3.1练习编写简单程序
|
14天前
|
Python
过年了,让GPT用Python给你写个放烟花的程序吧!
过年了,让GPT用Python给你写个放烟花的程序吧!
18 0
|
19天前
|
存储 数据采集 NoSQL
使用Python打造爬虫程序之数据存储与持久化:从网络到硬盘的无缝对接
【4月更文挑战第19天】本文探讨了爬虫中的数据存储与持久化技术,包括文本文件存储、数据库(关系型与非关系型)、NoSQL数据库和键值存储,以及ORM框架的使用。根据数据类型、规模和访问需求选择合适存储方式,并注意数据安全、备份和恢复策略。正确选择和应用这些技术能有效管理和利用爬取数据。
|
19天前
|
数据采集 缓存 算法
使用Python打造爬虫程序之Python中的并发与异步IO:解锁高效数据处理之道
【4月更文挑战第19天】本文探讨了Python中的并发与异步IO,区分了并发(同时处理任务)与并行(同时执行任务)的概念。Python的多线程受限于GIL,适合IO密集型任务,而多进程适用于CPU密集型任务。异步IO通过非阻塞和回调/协程实现高效IO,Python的asyncio库提供了支持。应用场景包括Web开发和网络爬虫等。实践指南包括理解任务类型、使用asyncio、避免阻塞操作、合理设置并发度和优化性能。理解并运用这些技术能提升Python程序的效率和性能。