Python基础教程(第3版)中文版 第19章 趣味编程 (笔记)

简介: Python基础教程(第3版)中文版 第19章 趣味编程 (笔记)

                               第19章 趣味编程

1. 为何要有趣

感到有趣时,实现高效就容易得多。

2. 编程柔术

在编程过程中遇到麻烦时,要灵活变通。

3.原型设计:

原型指的是尝试性实现,即一个模型。它实现了程序的主要功能。

对程序的结构(如需要哪些类和函数)有一定想法后,先实现一个功能简单的版本,有了可运行的程序后,可再添加新功能。

4.配置:

1.提取常量

常量值内置的字面量值,如数、字符串和列表。

常量可直接存储在全局变量,不必重复输入。

要指出变量为常量,变量名使用大写字母,用下划线分隔单词。

2.配置文件

将配置变量放在独立的文件中,方便进行更改设置。

方法1.为配置创建一个模块。

方法2.使用标准库模块configparser,可在配置文件中使用标准格式。如:

greeting = 'Hello, world!'

或者

greeting: Hello, world!

必须使用[files]、 [colors]等标题将配置文件分成几部分。

标题名称可自定义,然后用[]括起。

例:

创建一个配置文件,名为area.ini

内容如下:

[numbers]

pi: 3.14159265335897931

[messages]

greeting: Welcome to the area calculation program!

question: Please enter the radius:

result_message: The area is

在程序中使用:

#使用配置文件中的常量,进行圆面积计算

from configparser import ConfigParser

CONFIGFILE = "area.ini"

config = ConfigParser()

config.read(CONFIGFILE)

print(config['messages'].get('greeting'))

radius = float(input(config['messages'].get('question')+ '' ))

print(config['messages'].get('result_message'), end=' ')

print(config['numbers'].getfloat('pi') * radius **2)

5.日志

日志就是收集与程序运行相关的数据的一个东西。

print语句是一种简单的日志形式。要使用它,只需在程序开头包含:

log = open('logfile.txt', 'w')

然后就可以将程序信息写入这个文件:

print('Downloading file from URL', url, file=log)

text = urllib.urlopen(url).read()

print('File successfully downloaded', file = log)更好的做法是使用标准库中的模块logging

例:

import logging

logging.basicConfig(level=logging.INFO, filename='mylog.log')

logging.info('Starting program')

logging.info('Trying to divide 1 by 0')

print(1/0)

logging.info('The division succeed')

logging.info('ending program')

将在包含程序的文件夹找到一个'mylog.log'的文件

打开后看到程序运行的信息

INFO:root:Starting program

INFO:root:Trying to divide 1 by 0

6.如果你已不胜其烦

7.如果你想深入学习

 Andrew Hunt和David Thomas的著作《程序员修炼之道》。

 Martin Fowler等的著作《重构》①。

 四人组Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides的著作《设计模式》。

 Kent Beck的著作《测试驱动开发》。

 Eric S. Raymond的著作《UNIX编程艺术》②。

 Thomas H. Cormen等的著作《算法导论》。

 高德纳的著作《计算机程序设计艺术》(卷1~卷3)③。

 Peter Van Roy和Seif Haridi的著作Concepts, Techniques, and Models of Computer Programming。


相关文章
|
8天前
|
安全 Python
告别低效编程!Python线程与进程并发技术详解,让你的代码飞起来!
【7月更文挑战第9天】Python并发编程提升效率:**理解并发与并行,线程借助`threading`模块处理IO密集型任务,受限于GIL;进程用`multiprocessing`实现并行,绕过GIL限制。示例展示线程和进程创建及同步。选择合适模型,注意线程安全,利用多核,优化性能,实现高效并发编程。
22 3
|
8天前
|
数据采集 大数据 数据安全/隐私保护
Python编程:如何有效等待套接字的读取与关闭
Python网络编程中,套接字事件处理至关重要。利用`selectors`模块和代理IP能增强程序的稳定性和可靠性。代码示例展示了如何通过代理连接目标服务器,注册套接字的读写事件并高效处理。在代理IP配置、连接创建、事件循环及回调函数中,实现了数据收发与连接管理,有效应对网络爬虫或聊天应用的需求,同时保护了真实IP。
Python编程:如何有效等待套接字的读取与关闭
|
3天前
|
数据挖掘 开发者 Python
如何自学Python编程?
【7月更文挑战第14天】如何自学Python编程?
17 4
|
6天前
|
Python
不容错过!Python中图的精妙表示与高效遍历策略,提升你的编程艺术感
【7月更文挑战第11天】在Python编程中,图以邻接表或邻接矩阵表示,前者节省空间,后者利于查询连接。通过字典实现邻接表,二维列表构建邻接矩阵。图的遍历包括深度优先搜索(DFS)和广度优先搜索(BFS)。DFS使用递归,BFS借助队列。这些基础技巧对于解决复杂数据关系问题,如社交网络分析或迷宫求解,至关重要,能提升编程艺术。
13 5
|
8天前
|
存储 算法 Python
震撼!Python算法设计与分析,分治法、贪心、动态规划...这些经典算法如何改变你的编程世界!
【7月更文挑战第9天】在Python的算法天地,分治、贪心、动态规划三巨头揭示了解题的智慧。分治如归并排序,将大问题拆解为小部分解决;贪心算法以局部最优求全局,如Prim的最小生成树;动态规划通过存储子问题解避免重复计算,如斐波那契数列。掌握这些,将重塑你的编程思维,点亮技术之路。
16 1
|
9天前
|
算法 索引 Python
Python算法设计与分析大揭秘:分治法、贪心算法、动态规划...掌握它们,让你的编程之路更加顺畅!
【7月更文挑战第8天】探索Python中的三大算法:分治(如快速排序)、贪心(活动选择)和动态规划(0-1背包问题)。分治法将问题分解求解再合并;贪心策略逐步求局部最优;动态规划通过记忆子问题解避免重复计算。掌握这些算法,提升编程效率与解决问题能力。
16 1
|
1天前
|
算法 程序员 计算机视觉
Python并查集:数据结构界的肌肉男,让你在编程路上无所畏惧!
【7月更文挑战第16天】并查集,一种处理不相交集合合并与查询的数据结构,被誉为编程的“肌肉男”。它提供Find(找根节点)和Union(合并集合)操作,常用于好友关系判断、图像处理、集合合并等。Python实现中,路径压缩和按秩合并优化效率。并查集的高效性能使其成为解决问题的强大工具,助力程序员应对复杂挑战。
10 0
|
1天前
|
Python
智慧之光!Python并查集:点亮你的编程思维,让复杂问题迎刃而解!
【7月更文挑战第16天】并查集,一种树型数据结构,用于处理不交集合并与查询。通过路径压缩和按秩合并优化,支持Find(查找元素集合)和Union(合并集合)操作。Python实现简单示例展示如何判断社交网络中用户是否互为好友,高效解决连通性问题,点亮编程思维。
7 0
|
8天前
|
算法 调度 索引
Python堆与优先队列大起底:深入骨髓的解析,让你彻底告别低效编程!
【7月更文挑战第9天】Python的heapq模块实现了堆数据结构,提供heappush和heappop等操作,支持最小堆。堆是完全二叉树,满足堆属性。优先队列利用堆实现,元素按优先级出队。通过将优先级和元素打包入堆,如示例所示,能轻松处理优先级任务。掌握堆与优先队列,提升编程效率。
12 0
|
9天前
|
安全 调度 Python
Python堆与优先队列:不只是数据结构,更是你编程路上的超级加速器!
【7月更文挑战第8天】Python的heapq模块和queue.PriorityQueue提供堆与优先队列功能。堆,作为完全二叉树,支持排序性质,heapq用于单线程操作;PriorityQueue在多线程中保证安全。通过示例展示了如何插入、删除任务,以及在多线程任务调度中的应用。堆与优先队列是高效编程的关键工具,提升代码性能与并发处理能力。
9 0