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