[英]Python list.remove is not working as expected
我有一個從 0 到 100 的數字數組和另一個包含用戶必須猜測的數字的變量。 如果用戶猜測的數字更低,那么我將刪除所有低於該數字的數字。 簡而言之,我正在構建二進制搜索算法。
假設用戶必須猜測數字 25。他寫了 21 作為他的第一個猜測。 如果他試圖再次寫 21,代碼就會崩潰並給我這個錯誤:
ValueError: list.remove(x): x not in list
這是代碼:
import random
def binary_search_algo():
number_to_guess = random.randint(0,100)
random_number_list = list(range(0,100))
keep_guessing = True
print(number_to_guess)
while(keep_guessing):
user_guess = int(input('Enter you guess: '))
if(user_guess < number_to_guess):
try:
if(user_guess in random_number_list):
print('Too Low')
for i in range(user_guess):
random_number_list.remove(i+1)
print(i)
else:
print('Since your last guess was lower')
print('We eliminated every number lower than your previous guess')
print('So pick higher number next')
except:
print('Too Low')
elif user_guess > number_to_guess:
print('Too High')
else:
print('Good job')
break
binary_search_algo()
我試圖通過將它放在 try/except 中並向I
添加 +1 來修復它,但我認為這不是正確的解決方案。 有什么建議嗎?
ValueError: list.remove(x): x not in list
簡而言之,這就是說:我無法刪除它,因為它不在列表中。 在請求刪除之前,您應該檢查列表是否包含給定元素,即代替
random_number_list.remove(i+1)
做
if (i+1) in random_number_list:
random_number_list.remove(i+1)
在您當前的實現中,您可以使用列表理解來過濾掉較低的值:
random_number_list = [x for x in random_number_list if x >= user_guess]
由於列表是有序的,更有效的解決方案是找到列表中實際數字的 position,並只返回從給定索引開始的切片。
甚至更好——你根本不需要列表random_number_list
。 您只需要記住number_to_guess
下方的最高猜測數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.