Python Magic数字猜测器

时间:2017-12-03 17:58:45

标签: python list

我正在尝试从列表中删除数字,直到只剩下一个项目。我的for循环遇到了麻烦。它不断给出错误说明:

  File "C:/Users/kramsey/Desktop/Python/NumberGuesser2.py", line 28, in <module>
    list.remove(B)
ValueError: list.remove(x): x not in list

代码:

B = random.choice(list)

if ready == "ok":
    lessthan = input("is your number less than {}".format(B)).strip().lower()
    if lessthan == "yes":
        for numbers in list:
            B = int(B+1)
            list.remove(B)
        print(list)

我希望它删除不小于random.choice(list)的数字,而不会在用户点击列表中不包含的整数时向用户显示错误。

它总是告诉用户list.remove(x) not in list并且不会继续我的for循环。

2 个答案:

答案 0 :(得分:0)

让我们将您的问题简化为列表(适当地命名为l):

l = [1, 3, 4, 6, 7, 9]

和一个随机数(为简单起见,我们将其设置为5):

B = 5

现在,我们无法迭代l并从l中删除项目,因为这会导致我们遇到问题(正如您在错误中看到的那样)。因此,最好的方法是将l重新定义为使用list-comprehension制作的新列表。

l = [i for i in l if i > B]

这将l保留为:

[6, 7, 9]

这是正确的方式,可以执行您想要的操作,并希望您可以将其合并到您的代码中。

答案 1 :(得分:0)

假设您的列表由已排序的数字组成,您必须执行以下操作:

if lessthan == 'yes':
    index = len(list) - 1
    while list[index] >= B:
        list.remove(list[index])
        index -= 1
    print(list)

请记住,如果您要通过删除/删除元素来更改正在迭代的列表,则应该向后(从列表末尾到开头)。否则,您可以通过删除列表中间的元素来跳过某些元素。