《Python编程从0到1》笔记3——欧几里得算法
本节以欧几里得算法(这是人类历史上最早记载的算法)为示例,向读者展示注释、文档字符串(docstring)、变量、循环、递归、缩进以及函数定义等Python语法要素。
欧几里得算法:“在数学中,辗转相除法,又称欧几里得算法(Euclidean algorithm),是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。”---《维基百科.辗转相除法》
在实际操作中,可以使用带余数除法替代减法以减少步骤。下面是使用流程图绘制的算法示意图:

图 1.2 欧几里得算法流程图
在程序设计实践中,很少针对简单的程序绘制流程图。因为对于熟练的程序设计者来说,代码本身足以清晰地说明程序的执行流程。流程图往往用于描述大的软件系统的工作原理,或者用来辅助不够结构化的语言(如汇编语言)。
根据前述算法描述,计算252和105的最大公约数的计算步骤如下:
1.252除以105余42,问题转为求105和42的最大公约数;
2.105除以42余21,问题转为求42和21的最大公约数;
3.42除以21可以除尽,达到算法终点;
4.结论:252和105的最大公约数为21。
代码 1.2展示了欧几里得算法的Python实现:
#!/usr/bin/env python3 def gcd(a, b):
while b!=0:
a, b = b, a%b
return a print(gcd(252, 105))
代码 1.2的核心部分定义了用来求最大公约数的函数gcd,为了便于说明,将这部分提取如图 1.3所示:

图 1.3 gcd 函数图示
代码说明:
- 其中第1行定义了有两个参数的函数gcd()。函数是一段可以被反复调用的代码。gcd()函数计算参数a和b的最大公约数,并通过第4行的return语句返回计算的结果;
- 第2行while语句,请读者注意到这行连同在排版上用4个空格缩进,这表示这条语句属于gcd()函数(没有缩进的最后一行print()语句就不属于gcd函数)。while关键字后面跟随的条件判断"b!=0"表示当这个条件为真时就反复执行之后的第3行语句;
- 第2行语句是赋值语句,将b的值和a除以b的余数,再次赋值给a和b。这行每执行一次,就完成了一次“辗转相除”。这行语句前有8个空格,表明这行语句受前一条while语句控制,直至while之后的"b!=0"条件不为真,才停止执行。换言之就是当某次余数为0时停止执行。这实际上就是上面描述的欧几里得算法;
- 第4行语句是返回语句,将最后剩下的公约数a返回;
- 最后使用print语句将gcd(252, 105)的返回值打印出来。
程序运行结果:
$ ./gcd.py
21
可以使用python3解释器的 -i 命令行选项在启动解释器交互界面时加载执行程序文本。加载执行程序文本后,可以继续键入代码以执行:
$ python3 -i gcd.py
21
>>> gcd(12, 4)
4
>>> gcd(36, 54)
18
这是一本很有趣很有趣的Python入门书,墙裂推荐。

《Python编程从0到1》笔记3——欧几里得算法的更多相关文章
- Python编程从入门到实践笔记——异常和存储数据
Python编程从入门到实践笔记——异常和存储数据 #coding=gbk #Python编程从入门到实践笔记——异常和存储数据 #10.3异常 #Python使用被称为异常的特殊对象来管理程序执行期 ...
- Python编程从入门到实践笔记——类
Python编程从入门到实践笔记——类 #coding=gbk #Python编程从入门到实践笔记——类 #9.1创建和使用类 #1.创建Dog类 class Dog():#类名首字母大写 " ...
- Python编程从入门到实践笔记——字典
Python编程从入门到实践笔记——字典 #coding=utf-8 #字典--放在{}中的键值对:跟json很像 #键和值之间用:分隔:键值对之间用,分隔 alien_0 = {'color':'g ...
- Python编程从入门到实践笔记——操作列表
Python编程从入门到实践笔记——操作列表 #coding=utf-8 magicians = ['alice','david','carolina'] #遍历整个列表 for magician i ...
- Python编程从入门到实践笔记——列表简介
Python编程从入门到实践笔记——列表简介 #coding=utf-8 #列表——我的理解等于C语言和Java中的数组 bicycles = ["trek","cann ...
- Python编程从入门到实践笔记——变量和简单数据类型
Python编程从入门到实践笔记——变量和简单数据类型 #coding=gbk #变量 message_1 = 'aAa fff' message_2 = 'hart' message_3 = &qu ...
- Python编程从入门到实践笔记——文件
Python编程从入门到实践笔记——文件 #coding=gbk #Python编程从入门到实践笔记——文件 #10.1从文件中读取数据 #1.读取整个文件 file_name = 'pi_digit ...
- Python编程从入门到实践笔记——函数
Python编程从入门到实践笔记——函数 #coding=gbk #Python编程从入门到实践笔记——函数 #8.1定义函数 def 函数名(形参): # [缩进]注释+函数体 #1.向函数传递信息 ...
- Python编程从入门到实践笔记——用户输入和while循环
Python编程从入门到实践笔记——用户输入和while循环 #coding=utf-8 #函数input()让程序暂停运行,等待用户输入一些文本.得到用户的输入以后将其存储在一个变量中,方便后续使用 ...
- Python编程从入门到实践笔记——if语句
Python编程从入门到实践笔记——if语句 #coding=utf-8 cars=['bwm','audi','toyota','subaru','maserati'] bicycles = [&q ...
随机推荐
- centos后台运行程序
putty等软件运行,python程序:python p.py 只要一关闭putty, 程序就结束.如何让退出终端或关闭终端电脑,还能让程序在服务器后台运行Python. 关键的命令:nohup ...
- feign请求远程接口时报Caused by: java.net.UnknownHostException
报错全文如下 feign.RetryableException: host10.local executing POST http://TIBMAS2-WEBAPI/tibmas2-webapi/ap ...
- 提取包含QQ的文本为QQ邮箱
# -*- coding: utf-8 -*- """ Created on Sun Dec 15 14:08:03 2019 @author: Dell 提取包含QQ号 ...
- 前端接受base64的excel,点击立即下载
由于使用框架的特殊性,后台返回的文件流进行了base64加密,所以返回的是base64格式,所以需要将其转变为blob,上代码
- (转载)搜索引擎的Query自动纠错技术和架构详解
from http://www.52nlp.cn/%E8%BE%BE%E8%A7%82%E6%95%B0%E6%8D%AE%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E%E7 ...
- QT5线程关闭
QT5线程关闭 QThread析构函数的说明:请注意,删除一个QThread对象不会停止它管理的线程的执行. 删除正在运行的QThread(即isFinished()返回false)将导致程序崩溃. ...
- 【BZOJ2459】 [BeiJing2011]神秘好人
Description 有一个神秘好人跟Bdcxq玩一个游戏,如果Bdcxq成功完成了这个游戏,那么他将会得到一件礼物. 这个游戏是这样的: 有一个梯子形的图如下,每条边都有一个权值. 神秘好人一开始 ...
- Haystack全文检索框架
一.什么是Haystack Haystack是django的开源全文搜索框架(全文检索不同于特定字段的模糊查询,使用全文检索的效率更高 ),该框架支持Solr,Elasticsearch,Whoosh ...
- [LOJ2538][PKUWC2018]Slay the Spire:DP
分析 学会新姿势!我们可以通过调整DP顺序来体现选取物品的优先顺序! 显然选取强化牌的最优策略是倍数从高到低,能选就选,最多选\(k-1\)张,选取攻击牌的最优策略是伤害从高到低,尽量少选,但最少选\ ...
- 51nod-1640--天气晴朗的魔法(简单最小生成树)
1640 天气晴朗的魔法 题目来源: 原创 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 这样阴沉的天气持续下去,我们不免担心起他的健康. 51nod魔法学校近日 ...