我的代码在终端窗口中没有显示输出

问题描述 投票:0回答:1

我编写了一个二分搜索算法,并尝试在不同的编辑器(即 pycharm、github、jupiter notebook)上运行它。并且所有这些都没有显示任何输出。我的代码有问题吗?

def b_search(num):
   numlist = [12, 23, 34, 54, 67, 81, 99, 102]
   s = 0
   e = len(numlist) - 1
   m = round((s+e)/2)
   n = 1
   found = False
   while (found == False) or ( n != 0):
     if num == numlist[m]
       found = True
     elif num > numlist[m]:
       if m ==s or m==e:
         n=0
       else:
         s = round(m+1)
         m = round((s+e)/2)
     elif num < numlist[m]:
       if m==s or m==e:
         n=0
       else:
         e = round(m-1)
         m = round((s+e)/2)

   if n=0:
     return -1
   else:
     return m

print(b_search(23))

我热衷于发现任何逻辑或语法问题。

python binary-search
1个回答
0
投票
  1. 你不应该四舍五入 s 和 e,你只处理 整数,所以没有必要。

  2. 修复了识别和逻辑错误

  3. 虽然你不希望它被优化,但当我修复你的代码时 总是返回-1。

  4. 添加了检查以查看搜索范围是否已用尽(s 变为 大于 e)。如果发生这种情况,则意味着目标数量未达到 在列表中,我们将 n 设置为 0 以退出循环。

  5. 将 m 的计算移至循环内部以更新中间 索引正确。

  6. 在 if num == numlist[m] 和 if num > 末尾添加了冒号 numlist[m] 行来纠正语法。

  7. 将 if n=0: 更改为 if n == 0: 以更正比较语法。 (正如 Sembei Norimaki 指出的那样)

  8. 将 while (found == False) 或 (n != 0): 更改为 while (found == False) 和 (n != 0):确保仅当两者都满足时循环才继续 条件为真。如果 n = 0 我们想退出循环,并且如果我们 找到我们也想要的号码然后退出。

    def b_search(num):
        numlist = [12, 23, 34, 54, 67, 81, 99, 102]
        s = 0
        e = len(numlist) - 1
        n = 1
        found = False
        while (found == False) and (n != 0):
            m = round((s + e) / 2)
    
            if num == numlist[m]:
                found = True
            elif num > numlist[m]:
                s = m + 1  # Update s directly without rounding
            else:  # num < numlist[m] (if it isn't >, certainly is =<)
                e = m - 1  # Update e directly without rounding
    
            if s > e:  # Check if the search range is exhausted
                n = 0
    
        if n == 0:
            return -1
        else:
            return m
    
    print(b_search(23)) #outputs 1
    print(b_search(99)) #outputs 6
    print(b_search(100)) #outputs -1
    print(b_search(12)) #outputs 0
    print(b_search(102)) #outputs 7
    print(b_search(54)) #outputs 3
    print(b_search(81)) #outputs 5

© www.soinside.com 2019 - 2024. All rights reserved.