Python “有什么问题吗?”;我";在这里

Python “有什么问题吗?”;我";在这里,python,python-3.x,Python,Python 3.x,我想为字母做四格 >>> from nltk.probability import FreqDist >>> from nltk.util import ngrams >>> from nltk.text import Text >>> fin= open(r'C:\Users\user\Desktop\quran.txt', "r", encoding='utf-8').read() 我用utf-8打开了文件夹 >

我想为字母做四格

>>> from nltk.probability import FreqDist
>>> from nltk.util import ngrams
>>> from nltk.text import Text
>>> fin= open(r'C:\Users\user\Desktop\quran.txt', "r", encoding='utf-8').read()
我用utf-8打开了文件夹

 >>> generated_ngrams = ngrams(" " + fin, 4,pad_left=False, pad_right=True, right_pad_symbol=' ')
从fin生成NGRAM

>>> for gram in generated_ngrams  :
gram
i+=1
if i > 1000:
 break
我把文件缩短了,这样便于处理

(' ', '\ufeff', 'ب', 'ِ')
Traceback (most recent call last):
File "<pyshell#6>", line 3, in <module>
i+=1
NameError: name 'i' is not defined
(“,\ufeff”,“ب”,“ِ”)
回溯(最近一次呼叫最后一次):
文件“”,第3行,在
i+=1
名称错误:未定义名称“i”

这就是我的错误

我不完全确定代码的其余部分发生了什么,但在尝试递增之前,我从未初始化过。这就像在零上加1,这会产生一个错误。添加行:

i=0

在你发表声明之前。如果在For之后添加,则每个循环都会得到i=1,因为每次都会将1添加到0


此外,gram变量没有在任何地方使用,这也会导致错误。无论gram的值是什么,它都应该用于在您的方法中执行某些操作。否则,遍历生成的内存就没有意义了。

请使用下面的代码,它可能会有所帮助

i = 0
for gram in generated_ngrams:
    print(gram)
    i+=1
    if i > 1000:
       break

在Python中,
enumerate
函数允许使用自动计数器循环某些内容

对于您的示例,您可以按如下方式编写代码:

for i, gram in enumerate(generated_ngrams):
    if i > 1000:
        break

我冒昧地说,这将是一种更具python风格的方式。

I+=1
本质上被转换为
I=I+1
,这意味着在定义变量之前,您试图使用名为
I
的变量。在尝试递增之前定义
i
。您正在尝试添加到
i
,但尚未在生成的图形中的任何位置为gram定义它:gram i=i+1如果i>1000:break('1576;','1616;','1587;','1618;')Traceback(最后一次调用):文件“”,第3行,在i=i+1名称中错误:未定义名称'i'