Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x “有什么用?”;而不是",;用Python?_Python 3.x - Fatal编程技术网

Python 3.x “有什么用?”;而不是",;用Python?

Python 3.x “有什么用?”;而不是",;用Python?,python-3.x,Python 3.x,为什么没有“和找不到”代码就不能工作。这句话有什么用 def BinarySearch(alist, item): first=0 last=len(alist)-1 found=False while first<=last and not found: midpt= (first+last)//2 if alist[midpt] == item: found=True else: if item < alist

为什么没有“和找不到”代码就不能工作。这句话有什么用

def BinarySearch(alist, item):
  first=0
  last=len(alist)-1
  found=False  
  while first<=last and not found: 
    midpt= (first+last)//2
    if alist[midpt] == item:
      found=True
    else:
      if item < alist[midpt]:
        last=midpt-1
      else:
        first=midpt+1
  return(found)

alist=[1,2,3,4,5]
item=8
print(BinarySearch(alist,item)
def二进制搜索(列表,项目):
第一个=0
last=len(alist)-1
发现=错误

首先,它不是一个语句,而是一个表达式(实际上是三个表达式*)

如果删除
且未找到
部分,则搜索在找到该项目时不会停止,它将继续进行,直到到达末尾。对于
和notfound
,它在找到项目时停止

在您的情况下,因为您正在列表中查找找不到的内容(
8
),所以没有任何区别。但是如果你寻找,比如说,
3
,它会


*不必要的细节:

  • 访问变量是一个表达式,其结果是该变量包含的值,因此
    中的
    找到
    是一个表达式
  • 非v1
    (其中v1是来自#1的值)是第二个表达式:它接受给定值并对其求反
  • v0和v2
    (其中v2是来自#2的值,v0是
    之前表达式的结果,未找到
    )是第三个表达式:当两个操作数都为真时,其结果为真,否则为假

  • found
    是一个布尔标志,用于指示您是否找到了一直在寻找的项目。一旦你找到了它,继续寻找它就没有意义了,你应该把它退回

    可以说,一个更简洁的实现是使用早期返回范式,在找到项目后只返回
    True

    def BinarySearch(alist, item):
      first = 0
      last = len(alist) - 1
      while first<=last: 
        midpt = (first+last)//2
        if alist[midpt] == item:
          return True
    
        if item < alist[midpt]:
          last = midpt - 1
        else:
          first = midpt + 1
    
      return False
    
    def二进制搜索(列表,项目):
    第一个=0
    last=len(alist)-1
    
    首先,理解这类事情(而不是阅读)的最佳方法是使用调试器逐个语句地遍历代码语句。如果您使用和不使用
    和not found
    ,并且在上面的测试用法中将
    项从
    8
    更改为
    3
    ,您将看到差异;您可以删除
    和未找到
    ,将
    找到=真
    替换为
    返回真
    ,将
    返回(找到)
    替换为
    返回假
    ;标准库模块在C代码中实现对分,只需
    pos=bisect.bisect(alist,item)
    ,然后
    返回pos