[英]Python repeated output from program
我創建了二進制搜索,但是遇到了問題。 每當我運行main()時,當鍵等於8、5、2和1時,我只會得到None。我還試圖讓bsearch返回integer_list中key_point值的索引,但它只會返回key_point。 如果有人能讓我知道出了什么問題,我將不勝感激。
def bsearch(integer_list, key_point, start, end):
midpoint = (start + end) // 2
if start >= end:
return None
elif integer_list[midpoint] == key_point:
return key_point
elif integer_list[midpoint] > key_point:
return bsearch(integer_list, key_point, start, (midpoint - 1))
elif integer_list[midpoint] < key_point:
return bsearch(integer_list, key_point, (midpoint + 1), end)
def main( ):
integer_list = [x + 1 for x in range(0, 10)]
key = 11
p = len(integer_list) - 1
start = integer_list[0]
end = integer_list[p]
while key >= 1:
bsearch(integer_list, key, start, end)
print(bsearch(integer_list, key, start, end))
key = key - 1
您有以下錯誤:
1)從main
到binary_search
的調用包含start = 1 and
end = 10 which should have been
start = 0和end = 9
(索引值)。我們根據索引找到所有中點。
2)只需檢查start > end
因為start == end
絕對正確,並且出現None
情況都是由於這種情況。 由於這種情況您返回的所有情況實際上都是integer_list[midpoint] == key_point
成立的情況。
這是更正的代碼:
def bsearch(integer_list, key_point, start, end):
midpoint = (start + end) // 2
if start > end:
return None
elif integer_list[midpoint] == key_point:
return key_point
elif integer_list[midpoint] > key_point:
return bsearch(integer_list, key_point, start, (midpoint - 1))
elif integer_list[midpoint] < key_point:
return bsearch(integer_list, key_point, (midpoint + 1), end)
def main():
integer_list = [x + 1 for x in range(0, 10)]
key = 11
p = len(integer_list) - 1
start = integer_list[0]
end = integer_list[p]
while key >= 1:
print(bsearch(integer_list, key, 0, p))
key = key - 1
main()
希望有幫助:)
您正在算法中多次混合索引和值。 您的基本案例/發現案例應該返回中點,因為這是您找到它的地方,但是您返回的是key_point,實際上是您要搜索的值。
同樣,在設置循環時,您將開始和結束值設置為List的開頭和結尾的內容,而不是開頭和結尾的索引。 如果您為test_list使用了一組數字,而不僅僅是連續數字1-11,那么其中的一些錯誤將變得更加明顯。 現在,它正好排隊。
首先,您要將值而不是索引傳遞給函數:
start = 0
end = len(integer_list) - 1
第二,當開始和結束都相反時,您需要返回None。 當它們相等時
if start > end:
return None
第三,為什么要返回要搜索的值? 這沒有任何意義。 您應該改為返回元素的索引。
elif integer_list[midpoint] == key_point:
return mid_point
最后,如果要遵循幾乎所有搜索方法返回的內容,則在找不到所需的值時應返回-1,而不是None。 這將使您免於頭痛。
if start > end:
return -1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.