python二分法递归_python 递归和二分法

一 内置函数

1. revserd 翻转,返回的是迭代器

# 将 s 倒置

s = '不是上海自来水来自海上'

# 方法一

print(s[::-1])

# 方法二

s1 = reversed(s)

i = ''

for el in s1:

i +=el

print(i)

2.slice 切片

lis = ['nishi','woshi','shuia','benjim']

s = slice(1,3)

print(lis[s])

3.formate

# 格式化输出

s = "我叫{name},我想去{adress},我喜欢{hobby}.".format(name='zhangmeng',adress='上海',hobby='dance')

print(s)

# 字符串

print(format('test', '<20')) # 左对齐

print(format('test', '>20')) # 右对齐

print(format('test', '^20')) # 居中

# 数值

print(format(3, 'b')) # 二进制

print(format(97, 'c')) # 转换成unicode字符

print(format(11, 'd')) # 十进制

print(format(11, 'o')) # 八进制

print(format(11, 'x')) # 十六进制(小写字母)

print(format(11, 'X')) # 十六进制(大写字母)

print(format(11, 'n')) # 和d一样

print(format(11)) # 和d一样

# 浮点数

print(format(123456789, 'e')) # 科学计数法. 默认保留6位小数

print(format(123456789, '0.2e')) # 科学计数法. 保留2位小数(小写)

print(format(123456789, '0.2E')) # 科学计数法. 保留2位小数(大写)

print(format(1.23456789, 'f')) # 小数点计数法. 保留6位小数

print(format(1.23456789, '0.2f')) # 小数点计数法. 保留2位小数

print(format(1.23456789, '0.10f')) # 小数点计数法. 保留10位小数

print(format(1.23456789e+10000, 'F')) # 小数点计数法.

4. type() 返回类型 ord() 输入字符找字符编码的位置 chr() 输入位置找出对应的字符 ascii()判断给出的信息是否是ascii

for i in range(65536):

print(chr(i), end="")

二. 递归

函数自己调用自己,递归的入口(参数) 和 出口(return)

语法:

def func():

print('我是递归')

func()

func() # 官方显示最多到1000.但不会跑到1000,实际到998

# 树形结构的遍历

import os

def func(lujing, n):

lis = os.listdir(lujing) # 打开文件夹,列出文件夹内的所有文件名

for el in lis: # el 为文件的名字

# 还原文件路径

path = os.path.join(lujing,el)

if os.path.isdir(path):# 判断路径是否是文件夹

print('*' * n,el) # 显示文件夹的名字

func(path, n+1) # 再来一次

else:

print('/t'*n,el) # 显示文件

func('f:/a', 0)

import os

def func(lujing, n):

lis = os.listdir(lujing ) # 打开文件夹,列出文件夹内的所有文件名

for el in lis: # el为文件名

# 还原文件的路径

path = os.path.join(lujing, el)

if os.path.isdir(path): # 判断路径是否是文件夹

print('*'* n, el) # 显示文件夹名称

func(path, n+1) # 再来一次

else:

with open(path,mode='wb') as f: # 打开文件,都写入内容

f.write(b'')

print('/t'*n, el) # 显示文件

func('F:/a',0)

三. 二分法

掐头结尾取中间,查找效率非常高,二分法查找的主要作用就是查找元素

# 二分法查找

lst = [1,4,6,7,9,21,23,45,67,87,65,43,89]

n = int(input('请输入一个数:'))

lst = sorted(lst)

# print(lst)

left = 0

right = len(lst)-1

while left <= right:

mid = (left + right)//2

if n > lst[mid]:

left = mid+1

elif n < lst[mid]:

right = mid -1

else:

print("存在")

break

else:

print('不存在')

# 递归 切割列表

def func(n,lst):

left = 0

right = len(lst)-1

if lst != []:

mid = (left+right)//2

if n>lst[mid]:

func(n,lst[mid+1:])

elif n < lst[mid]:

func(n,lst[:mid])

else:

print("找到了")

return

else:

print("没找到")

return

n = int(input('请输入你要查找的数:'))

lst = [1,4,6,7,9,21,23,45,67,87,65,43,89]

func(n,lst)

# 递归2

def func(n,lst,left,right): # 递归找到什么是可变的,什么是不可变的

if left <= right:

mid = (left+right)//2

if n > lst[mid]:

left = mid+1

return func(n,lst,left,right)

elif n < lst[mid]:

right = mid - 1

return func(n, lst, left, right)

else:

print('找到了')

return mid # 难点

else:

print('找不到')

return -1

n = int(input('请输入你要查找的数:'))

lst = [13,45,56,67,78,57,89,101]

ret = func(n,lst,0,len(lst)-1)

print(ret)

# 最快的查找方法

lst = [13,45,56,57,67,78,89,101]

# 找出最大的数

new_lst = []

for i in range(99):

new_lst.append(0)

for i in lst:

new_lst[i] = 1

i = int(input('请输入你要找的数据:'))

if new_lst[i] == 0:

print('不存在')

else:

print('存在')

python递归和二分法

一.递归 1.递归就是自己调用自己 def fn(n): print(n) fn(n+1) fn(1) #递归深度官方1000 一般都递归到998 2.树形结构的遍历 import os def fn ...

python之匿名函数、递归与二分法

一.匿名函数 什么是匿名函数? 顾名思义就是没有名字的函数,在我们声明一个函数时会想起个什么函数名好,这个问题我想有时候会困惑大家的吧?   def func(): #正常函数声明 pass prin ...

python函数:匿名函数、函数递归与二分法、面向过程编程

今天主要讲三大部分内容: 一.匿名函数二.函数递归与二分法三.面向过程编程 一.匿名函数: """ 1. 什么时匿名函数 def定义的是有名函数:特点是可以通过名字重复调 ...

python递归 及 面向对象初识及编程思想

递归 及 面向对象初识及编程思想   一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递 ...

用Python递归解决阿拉伯数字转为中文财务数字格式的问题&lpar;2&rpar;--打开思路的一种方法

几天前自己写了个将阿拉伯数字转为中文财务数字的程序.用的递归,不幸的是它是树形递归. 虽然实际过程中不太可能出现金额数字大到让Python递归栈溢出,但是始终是一块心病,这玩意终究在理论上是受限制的. ...

Python递归&lowbar;打印节点信息

Python递归_打印节点信息 递归特性:1.必须由一个明确的结束条件2.每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时 ...

PYTHON-匿名函数,递归与二分法,面向过程编程-练习

# 四 声明式编程练习题 # 1.将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写names = ['egon', 'alex_sb', ' ...

PYTHON-匿名函数,递归与二分法,面向过程编程

"""匿名函数1 什么是匿名函数 def定义的是有名函数:特点是可以通过名字重复调用 def func(): #func=函数的内存地址 pass 匿名函数就是没有名字的 ...

Python递归实现汉诺塔

Python递归实现汉诺塔: def f3(n,x,y,z): if(n==1): print(x,'--->',z) else: f3(n-1,x,z,y) print(x,'--->' ...

随机推荐

arcgis 许可异常的解决

异常现象: arcgis 许可服务管理器中无法重新读取许可,许可服务启动后立即停止.         解决方法: 1.卸载license:安装新的license!重新破解,替换license文件夹BI ...

jQuery 2&period;0&period;3 源码分析 Deferred概念

JavaScript编程几乎总是伴随着异步操作,传统的异步操作会在操作完成之后,使用回调函数传回结果,而回调函数中则包含了后续的工作.这也是造成异步编程困难的主要原因:我们一直习惯于“线性”地编写代码 ...

《zw版&&num;183&semi;Halcon-delphi系列原创教程》 Halcon分类函数&&num;183&semi;简明中文手册 总览

Halcon分类函数·简明中文手册 总览 Halcon函数库非常庞大,光HALCONXLib_TLB.pas文件,源码就要7w多行,但核 ...

Maven之打包时配置文件替换

在JavaWeb项目中,使用maven打包.在打正式包时,需要手动修改数据库配置为线上环境的地址,这样每次修改起来比较麻烦. 搜索了一些资料后,大部分的做法或原理都是预先使用表达式占位符,然后在打包时 ...

android studio的里的 content&lowbar;XXX&lowbar;xml问题

遇到这个问题就是androidStudio的版本问题,androidStudio会出现这个问题是在androidStudio1.4以上版本当遇到这个问题的时候建Activity的时候选择EmptyAc ...

HADOOP集群监控工具AMBARI

HADOOP集群监控工具AMBARI安装 Apache Ambari是对Hadoop进行监控.管理和生命周期管理的开源项目.它也是一个为Hortonworks数据平台选择管理组建的项目.Ambari向 ...

前端基本知识(四):JS的异步模式:1、回调函数;2、事件监听;3、观察者模式;4、promise对象

JavaScript语言将任务的执行模式可以分成两种:同步(Synchronous)和异步(Asychronous). “同步模式”就是一个任务完成之后,后边跟着一个任务接着执行:程序的执行顺序和排列 ...

HTML5 Audio&sol;Video 标签&comma;属性&comma;方法&comma;事件汇总 (转)

HTML5 Audio/Video 标签,属性,方法,事件   标签属性:src:音乐的URLpreload:预加载autoplay:自动播放loop:循环播放contro ...

ffplay常用命令

一.ffplay 常用参数 ffplay不仅仅是播放器,同时也是测试ffmpeg的codec引擎,format引擎,以及filter引擎的工具,并且也可以做可视化的媒体参数分析,可以通过ffplay ...

ASP&period;NET没有魔法——ASP&period;NET MVC界面美化及使用Bundle完成静态资源管理

对于一个应用来说界面的重要性无言而喻,而Web应用的界面是使用Html+Css以及Javascript实现的,ASP.NET MVC是一个用来构建Web应用的框架,它的界面也是Html实现的,对于一些 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值