pionrrt 发表于 2023-6-7 10:55:30

想问一下为什么这个运行不了,报错也不太理解

想问一下为什么这个运行不了,报错也不太理解

isdkz 发表于 2023-6-7 10:57:07

这是python2的写法,python3的print要写括号

改成 print(binary_search(my_list, 3))

pionrrt 发表于 2023-6-7 11:02:27

isdkz 发表于 2023-6-7 10:57
这是python2的写法,python3的print要写括号

改成 print(binary_search(my_list, 3))

嗯 我试了一下,但是运行之后,并没有return结果,但确实这次不报错了

isdkz 发表于 2023-6-7 11:03:37

pionrrt 发表于 2023-6-7 11:02
嗯 我试了一下,但是运行之后,并没有return结果,但确实这次不报错了

因为你的缩进错了


my_list=
print(binary_search(my_list, 3))
这两行应该要放在函数外面的

pionrrt 发表于 2023-6-7 14:07:22

isdkz 发表于 2023-6-7 11:03
因为你的缩进错了




def binary_search(list, item):
    low = 0
    high=len(list)-1
   
    while low<=high:
      mid=(low + high)
      guess=list
      if guess==item:
            return mid
      if guess>item:
            high=mid-1
      else:
            low=mid+1
    return None
   
my_list=
print(binary_search(my_list, 7))

还想问一下,mid=(low + high)这里为什么不除以2呢,我 输入 mid=(low + high)/2再运行代码就是错的

isdkz 发表于 2023-6-7 14:31:31

pionrrt 发表于 2023-6-7 14:07
还想问一下,mid=(low + high)这里为什么不除以2呢,我 输入 mid=(low + high)/2再运行代码就是错的

你在计算mid的时候应该要除以2,以得到中间位置的索引。但在Python中,除法运算符"/"会产生浮点数结果,而在索引中我们需要的是整数,因此你应该使用"//"来进行整数除法。

所以,你的代码应该如下修正:

def binary_search(list, item):
    low = 0
    high=len(list)-1
   
    while low<=high:
      mid=(low + high) // 2#使用了"//"来进行整数除法
      guess=list
      if guess==item:
            return mid
      if guess>item:
            high=mid-1
      else:
            low=mid+1
    return None
   
my_list=
print(binary_search(my_list, 7))


这样你的代码应该就可以正确运行了。
页: [1]
查看完整版本: 想问一下为什么这个运行不了,报错也不太理解