簡體   English   中英

Python list.remove 未按預期工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM