前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python编程实现:二分法

Python编程实现:二分法

作者头像
葆宁
发布2019-07-03 16:39:47
6530
发布2019-07-03 16:39:47
举报
文章被收录于专栏:FREE SOLOFREE SOLO
代码语言:javascript
复制
   def BinarySearch(list1, num):
   min = 0               # 最小的下标
       max = len(list1) - 1  # 最大的下标
       i = 0
       while True:
           i += 1
           mid = (max + min) // 2 # 中间的下标每次向下取整
           if num > list1[mid] :
               min = mid + 1  # 小于需要的猜的数,则将最小下标变为中间的,又因为中间的已经猜过,所以要加1
           elif num == list1[mid] :
               print("找到数据")
               print("一共查找%d次"%i)
               break
           else :
               max = mid - 1  # 大于需要的猜的数,则将最大下标变为中间的,又因为中间的已经猜过,所以要减1
           if __name__ == "__main__":
        list1 = [i for i in range(0,100)]
       num = 5
       BinarySearch(list1, num)

程序入口

对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面向对象的编程语言 Java,C# 等。如果你接触过这些语言,对于程序入口这个概念应该很好理解,C 和 C++ 都需要有一个 main 函数来作为程序的入口,也就是程序的运行会从 main 函数开始。同样,Java 和 C# 必须要有一个包含 Main 方法的主类来作为程序入口。

而 Python 则有不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。

一个 Python 源码文件除了可以被直接运行外,还可以作为模块(也就是库)被导入。不管是导入还是直接运行,最顶层的代码都会被运行(Python 用缩进来区分代码层次)。而实际上在导入的时候,有一部分代码我们是不希望被运行的。

举一个例子来说明一下,假设我们有一个 const.py 文件,内容如下:

代码语言:javascript
复制
PI = 3.14
def main():
   print("PI:", PI)
main()

我们在这个文件里边定义了一些常量,然后又写了一个 main 函数来输出定义的常量,最后运行 main 函数就相当于对定义做一遍人工检查,看看值设置的都对不对。然后我们直接执行该文件(python const.py),输出:

PI: 3.14 现在,我们有一个 area.py 文件,用于计算圆的面积,该文件里边需要用到 const.py 文件中的 PI 变量,那么我们从 const.py 中把 PI 变量导入到 area.py 中:

代码语言:javascript
复制
from const import PI

def calc_round_area(radius):
return PI * (radius ** 2)

def main():
print "round area: ", calc_round_area(2)

main()

运行 area.py,输出结果:

代码语言:javascript
复制
PI: 3.14
round area:  12.56

可以看到,const 中的 main 函数也被运行了,实际上我们是不希望它被运行,提供 main 也只是为了对常量定义进行下测试。这时,if name == ‘main’ 就派上了用场。把 const.py 改一下:

代码语言:javascript
复制
PI = 3.14

def main():
print "PI:", PI

if __name__ == "__main__":
main()

然后再运行 area.py,输出如下:

代码语言:javascript
复制
 round area:  12.56

再运行下 const.py,输出如下:

代码语言:javascript
复制
 PI: 3.14

这才是我们想要的效果。

if name == ‘main’ 就相当于是 Python 模拟的程序入口。Python 本身并没有规定这么写,这只是一种编码习惯。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于 name 的值。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年07月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档