python 递归和二分法
2018-12-14 08:38:38来源:博客园 阅读 ()
一 内置函数
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'123456') 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('存在')
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash