day14 内置函数二

今日所学:

1. 昨日内容补充 

    repr()显示出字符串的官方表示形式

    ord(元素)  查看编码的位置 

    chr(编码)  查看编码所对应的元素

2.递归  : 自己调用自己 就是递归,在python中递归最大的深度是997,官方给出的最大深度是1000

从python中显示d盘所有的文件名字
import os # 引入OS模块 def func(lujing,n): #定义路径 lst=os.listdir(lujing) #打开路径 for i in lst: #遍历路径,拿到文件夹 path=os.path.join(lujing,i) 找到d盘中的文件名 if os.path.isdir(path): #判断路径是否是文件夹 print(' '*n,i) #显示文件夹的名字 func(path,n+1) #递归 ,再来一次 (最重要) else: print(i) #如果不是文件夹,打印文件名字 func(d:/老男孩教学,0) #传参

  

  递归的入口(参数) 和出口(return)比较重要 

  主要用途 : 树形结构的遍历

 3 . 二分法  (二分法查找主要的作用是查找元素)  

  掐头去尾取中间    查找效率非常高

用递归去运用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
s=int(input('请输入你要查找的内容:'))
lst = [1,3,5,7,12,36,68,79] # 数据集 百万级数据
ret=func(s,lst,0,len(lst)-1)
print(ret)
二分法  # 不使用递归(需要你明白和掌握)
 lst = [1,3,5,7,12,36,68,79]
s=int(input('请输入你要查找的内容:'))
left=0  #左函数
right=len(lst)-1  #右函数
while left<=right:   #判断如果左函数小于右函数
    mid=(left+right)//2   #求中间值
    if s>mid: # 如果输入的数大于中间值
        left=mid+1  
    elif s<mid: # 如果输入的数小于中间值
        right=mid-1
    else:   #输入的数等于中间值
        print('找到数了')
        break    #退出
else:  # 如果左函数大于右函数
    print('没找到数')

 4. 补充 :最快速的查找方法(既节省内存,查找速度又快)

lst = [1,3,55,98,37,41,2,5,1,4]
new_lis=[]  #新建一个列表
for i in range(99):  #找到列表中最大的数字,用for循环把所有的数字拿出来
    new_lis.append(0) #在新列表中添加98个0
for el in lst: #循环之前的列表,把新列表中对应的数字变成1
    new_is[el]=1
cont=int(input('请输入你要查找的内容:'))
if new_lis[cont]==0: #如果你输入的数字在新列表中是0 ,没找到数
    print('没找到数')
elif new_lis[cont]==1: #如果输入的数字在新列表中是1,找到数了
    print('找到数了')

  

原文地址:https://www.cnblogs.com/zty1304368100/p/10115506.html