我不知道';我不知道为什么';我得到这个错误或索引超出范围。I';我在jupyter笔记本中使用Python 3.0

我不知道';我不知道为什么';我得到这个错误或索引超出范围。I';我在jupyter笔记本中使用Python 3.0,python,jupyter-notebook,index-error,Python,Jupyter Notebook,Index Error,---------------------------------------------------------------------------索引器回溯(最近的调用) 最后)在() 20 dict_5000.pop(一) 21 --->22单词猜测者() 在word_guesser()中 11 12 def word_guesser(): --->13仅限字数() 14打印(dict_5000) 十五 仅限字数() 17 def only_length_words(): 18适用于范围内

---------------------------------------------------------------------------索引器回溯(最近的调用) 最后)在() 20 dict_5000.pop(一) 21 --->22单词猜测者()

在word_guesser()中 11 12 def word_guesser(): --->13仅限字数() 14打印(dict_5000) 十五

仅限字数() 17 def only_length_words(): 18适用于范围内的i(len(dict_5000)): --->19如果len(dict_5000[i].带('\n')=无任何字母: 20 dict_u5000.pop(i) 二十一,

索引器:列表索引超出范围


问题是您使用的是
pop()
,这会破坏列表,但您也会在列表上进行迭代。那么,假设列表中有一个元素被弹出。现在,残缺列表的长度比原始列表短,但是for循环仍将尝试迭代到列表的原始长度,这导致了
索引器

问题在于,您使用的是
pop()
,这会残缺列表,但您也在对列表进行迭代。那么,假设列表中有一个元素被弹出。现在,残缺列表的长度比原始列表短,但for循环仍将尝试迭代到列表的原始长度,这导致
索引器

侧注:使用
和open
构造打开文件,否则您将始终像现在一样失败-您忘记关闭文件:);对于问题-将范围内i(len(dict_5000))的
更改为范围内i(len(dict_5000)-1的
可能的重复也帮不了我。我按照你提到的方式编辑了代码。我现在在我的问题下对代码进行同样的修改。请检查它。somelist[:]=(如果确定(x),则somelist中的x代表x))这对我来说是可行的。谢谢你的帮助。很高兴有你。旁注:使用
和open
construct来打开文件,否则你总是像现在一样失败-你忘记关闭文件:);对于问题-将范围内i(len(dict_5000))的
更改为范围内i(len(dict_5000)-1的
可能的重复也帮不了我。我按照你提到的方式编辑了代码。我现在在我的问题下对代码进行同样的修改。请检查它。somelist[:]=(如果确定(x),则somelist中的x代表x))这对我来说是可行的。谢谢你的帮助。有你真好。
import random
from IPython.display import clear_output

dictionary = open("words_50000.txt","r")
dict_5000 = dictionary.readlines()
guess = random.choice(dict_5000).lower().strip('\n')
no_of_letters = len(guess)
game_str = ['-']*no_of_letters
only_length=[]

def word_guesser():
    only_length_words()
    print(dict_5000)


def only_length_words():
    for i in range(len(dict_5000)):
        if len(dict_5000[i].strip('\n'))!=no_of_letters:
            dict_5000.pop(i)    

word_guesser()