我試圖創建一個小程式,使用二進制搜索演算法,讓計算機自己猜測一組引數中的數字。
該函式接受的引數是它要猜多少次 "嘗試",以及它能猜到的數值(例如,要猜到 0 和 10 之間的數字需要 5 次嘗試)。
當我運行我的代碼時,它似乎只運行我的 else: 陳述句,而不管我傳入的引數是什么。
我在我的 "if "陳述句中遺漏了一些東西,但我被難住了,無法找出我做得不對的地方。
非常感謝您的時間和幫助!
。import random
def guess_random_number_binary(tries, start, stop)。
rand_number = random.randint(start,stop)
num_list = range(start,stop)
lower_bound = start
upper_bound = len(str(stop)) - 1
while lower_bound <= upper_bound:
pivot = (lower_bound upper_bound) //2
pivot_value = num_list[pivot] 。
if pivot_value == rand_number and tries > 0:
print("發現它! " str(rand_number))
return pivot
if pivot_value > rand_number and tries > 0:
upper_bound = pivot - 1.
tries -= 1: upper_bound = pivot - 1.
print ("incorrect guess" str(tries) " Remaining" )
else:
lower_bound = pivot 1。
print("Out of tries"/span>)
return(span class="hljs-string">"Out of tries")
guess_random_number_binary(5, 0 , 10)
更新:
import random
def guess_random_number_binary(tries, start, stop)。
rand_number = random.randint(start,stop)
num_list = []
lower_bound = start
upper_bound = stop
num_list = range(start,stop 1)
while lower_bound <= upper_bound:
pivot = (lower_bound upper_bound) // 2
pivot_value = num_list[pivot] 。
if tries > 0:
if pivot_value == rand_number:
print("Found it! " str(rand_number))
return pivot
elif pivot_value > rand_number:
upper_bound = pivot - 1
tries -= 1 print ("guessed " str(pivot) " incorrectly
" str(tries) " Tries remaining" )
elif pivot_value < rand_number:
lower_bound = pivot 1.
tries -= 1print ("guessed " str(pivot) " incorrectly
" str(tries) " Tries remaining" )
else:
print (" Ran out of tries!")
break5, 20 ,30)
我一直在努力除錯,即使我的新代碼過于簡化,我也希望它至少是朝著正確的方向發展的。
我認為主要問題在于我如何創建 "num_list",正如下面的一個答案所指出的。收到一個 IndexError,這在理論上是有道理的。然而,我似乎找不到創建該串列的替代方法。
再次感謝你。
uj5u.com熱心網友回復:
你在每個回圈的開始時重置了pivot的值,所以
你傳入了stop的值10。所以在upper_bound = len(str(stop)) - 1這一行,
upper_bound = len(str(stop))-1 = len(str(10) = len ('10')-1 = 1。
你的while回圈永遠不會運行,因為lower_bound永遠不會小于upper_bound。
你也許在某個時候打算做 upper_bound = len(num_list)-1,但不知為何寫成了 upper_bound = len(str(stop)) - 1。然而,即使這樣也是不正確的;range(start,stop)的長度是stop-start,而不是stop-start 1(range不包括stop)。而且,首先使用range是不必要的混淆,而且對于較大的start值來說是不可行的。例如,假設(start, stop) = (20, 30)。那么pivot將是25。但是range物件將只有10個元素,所以num_range[pivot]將回傳一個錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/308838.html
標籤:
上一篇:這個說法是否正確:`2^{n}-1=Θ(Fibonacci(n 1)-1)`?
下一篇:網路應用程式改變電子郵件演算法
