为什么代码在没有“未找到”的情况下无效。这个陈述有什么用?
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)
)
答案 0 :(得分:0)
这不是一个陈述,它是一个表达式(三个表达式*,真的)。
如果删除and not found
部分,搜索将在找到该项目时不会停止,它会一直持续到达结束。使用and not found
时,它会在找到项目时停止。
在您的情况下,由于您正在寻找列表中找不到的内容(8
),因此它没有任何区别。但是,如果你寻找,3
,它会。
*不必要的细节:
found
中的and not found
是表达式。not v1
(其中 v1 是来自#1的值)是第二个表达式:它接受给定值并取消它。v0 and v2
(其中 v2 是来自#2的值, v0 是and not found
之前的表达式的结果)是第三个表达式:当两个操作数都为真时,结果为true,否则为false。答案 1 :(得分:0)
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
:
public IEnumerable<dynamic> MyQuery()
{
const string queryString = " SELECT ..... " ; // this is my complex sql query
var result = context.Database.SqlQuery<dynamic>(queryString).ToList();
return result;
}