【问题标题】:My code finds values in the list, but does not show any prompt when the value is not found我的代码在列表中找到值,但没有找到值时不显示任何提示
【发布时间】:2022-11-26 21:19:52
【问题描述】:

我试图对列表 CardData=[11,12,25,33,52,56,57,59,85,91] 进行二进制搜索

这是我的二进制搜索方法

def binsea(x,CardData):
    front=0
    back=len(CardData)
    mid=len(CardData)//2
    found=False
    while front<back and found==False:
        if x==CardData[mid]:
            found=True
            print(x,"is found at position",mid)
        elif x<CardData[mid]:
            back=mid
            mid=(front+back)//2
        elif x>CardData[mid]:
            front=mid
            mid=(front+back)//2
        else:
            print(x,"not found.")

它可以在列表中找到数据,但不会对此调用执行任何操作。

binsea(55,CardData)

求助

def binsea(x,CardData):
    front=0
    back=len(CardData)
    mid=len(CardData)//2
    found=False
    while front<back and found==False:
        if x==CardData[mid]:
            found=True
            print(x,"is found at position",mid)
        elif x<CardData[mid]:
            back=mid
            mid=(front+back)//2
        elif x>CardData[mid]:
            front=mid
            mid=(front+back)//2
        else:
            print(x,"not found.")

binsea(55,CardData)

我期待输出“55 not found”。

【问题讨论】:

  • 很容易理解为什么它不起作用:你的 3 个 if、elif、elif 语句涵盖了所有可能的情况,所以 else 永远不会执行!此外,前、中、后 = 4、4、5 的循环永远继续下去。

标签: python


【解决方案1】:

一般来说,我认为自己调试代码的最佳方法通常是添加打印语句。尝试在循环结束时(循环内)打印 front、back 和 mid 的值。那应该可以帮助您找到问题。

你也可以查一下三分法。

【讨论】:

    【解决方案2】:

    你的程序正在运行。条件elif x&lt;CardData[mid]:将作为x = 55CardData[mid] = 56运行 添加一些很容易理解的打印语句

    【讨论】:

      【解决方案3】:

      这个应该可以工作(虽然我没有彻底测试它);也就是说,通过编写递归函数,二分法搜索会更适合。

      def binsea(x,CardData):
          front=0
          back=len(CardData)
          mid=len(CardData)//2
          found=False
          while back - front > 1 and found==False:
              print 
              if x==CardData[mid]:
                  found=True
                  print(x,"is found at position",mid)
              elif x<CardData[mid]:
                  back=mid
                  mid=(front+back)//2
              elif x>CardData[mid]:
                  front=mid
                  mid=(front+back)//2
          else:
              if not found:
                  print(x,"not found.")   
      

      【讨论】:

        猜你喜欢
        • 2022-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-03
        • 2023-03-14
        • 1970-01-01
        相关资源
        最近更新 更多