我不知道';我不知道为什么';我得到这个错误或索引超出范围。I';我在jupyter笔记本中使用Python 3.0
---------------------------------------------------------------------------索引器回溯(最近的调用) 最后)在() 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) 二十一, 索引器:列表索引超出范围我不知道';我不知道为什么';我得到这个错误或索引超出范围。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适用于范围内
问题是您使用的是
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()