zoukankan      html  css  js  c++  java
  • 【python入门到放弃】二分查找+接收不到返回值的问题梳理

    一、二分查找

     1 def erfen_search(para1,find_num):
     2     '''
     3     二分查找
     4     :param para1: 要查找的范围,比如列表或元组
     5     :param find_num: 要查找的数字
     6     :return:
     7     '''
     8     mid_index = len(para1)//2
     9     mid_num = para1[mid_index ]
    10     try:
    11         if find_num == mid_num:
    12             print('找到啦')
    13         elif find_num > mid_num:
    14             para1 = para1[mid_index+1:]
    15             erfen_search(para1,find_num)
    16         elif find_num < mid_num:
    17             para1 = para1[:mid_index]
    18             erfen_search(para1,find_num)
    19     except IndexError:
    20         print('未找到')
    21 
    22 #函数调用
    23 ls = [1,2,3,30,44,56,789,9000]
    24 erfen_search(ls,56)  

    二、思考与问题:

    1.自己在上面二分查找代码的基础上又优化了一下,想要在查找成功的时候,接收到一个返回值,比如接收的返回值内容为True

     1 def erfen_search(para1,find_num):
     2     '''
     3     二分查找
     4     :param para1: 要查找的范围,比如列表或元组
     5     :param find_num: 要查找的数字
     6     :return:
     7     '''
     8     mid_index = len(para1)//2
     9     mid_num = para1[mid_index ]
    10     try:
    11         if find_num == mid_num:
    12             print('找到啦')
    13             return True                 #增加了一行代码,接收返回值
    14         elif find_num > mid_num:
    15             para1 = para1[mid_index+1:]
    16             erfen_search(para1,find_num)
    17         elif find_num < mid_num:
    18             para1 = para1[:mid_index]
    19             erfen_search(para1,find_num)
    20     except IndexError:
    21         print('未找到')
    22 #函数调用
    23 ls = [1,2,3,30,44,56,789,9000]
    24 resault = erfen_search(ls,56)       #用resault接收返回值
    25 print(resault)      #打印之后发现,resault 接收到的值是None ???为什么???
    26 
    27 #执行结果
    28 找到啦
    29 None

    2.自己调试了一会发现,二分查找用到了函数的递归,先一层一层递推,再一层一层回溯回来;那么最后函数接收到的返回值实际上是以最后回溯给函数的返回值为准;于是我进行了简单的梳理和分析。知道了为什么最后数据查询成功了,但是没有返回值;

  • 相关阅读:
    读《31天学会CRM项目开发》记录4
    乡愁
    C#
    C#
    Redhat 离线安装 Docker (Community from binaries)
    使用FRP做内网穿透
    Windows上的Linux容器
    通过Powershell修改文件默认打开方式
    Office2019 VOL版本 自定义安装组件
    使用 Docker 生成 Let’s Encrypt 证书
  • 原文地址:https://www.cnblogs.com/chenglei0520/p/9438762.html
Copyright © 2011-2022 走看看