NameError:未定义行

时间:2015-07-24 01:21:11

标签: python python-3.x

这是我的简短代码:

import random
lines = list()
random.shuffle(line)
for i, line in enumerate(open('Filename.txt')):
    if i >= 21 and i < 89:
       print (line, end='')

我收到错误:

Traceback (most recent call last):
File "/Users/macbookpro/Desktop/Dictionary2.py", line 3, in <module>
random.shuffle(line)
NameError: name 'line' is not defined

现在我理解错误了,但我修复它有困难。当我注释掉random.shuffle(line)时,我的输出打印成功。但是当我尝试将其随机化时,随机随机播放无法识别&#39; line&#39;。为什么印刷会识别&#39; line&#39;但是random.shuffle没有?我怎样才能改变我的代码呢?

[编辑]当我通过更改&#39; line&#39;来调整代码时到&#39;线&#39;我现在得到以下NameError:

  import random
  lines = list(lines)
  random.shuffle(lines)
  for i, line in enumerate(open('Filename.txt')):
      if i >= 21 and i < 89:
      print (line, end='')

Traceback (most recent call last):
File "/Users/macbookpro/Desktop/Dictionary2.py", line 2, in <module>
lines = list(lines)
NameError: name 'lines' is not defined

random.shuffle仍然没有读到我放在那里的东西。我做错了什么?

1 个答案:

答案 0 :(得分:2)

这是因为在尝试line之前未声明变量shuffle()。而是声明变量lines

也许你的意思是:

lines = list()
random.shuffle(lines)

然而,这没有任何结果,因为改组空序列不会做任何事情。

现在,在for循环中分配line,因此它在循环体内可用。

你可能需要做的是这样的事情:

import random

with open('Filename.txt') as f:
    lines = f.readlines()
    random.shuffle(lines)
    for i, line in enumerate(lines):
        if i >= 21 and i < 89:
            print (line, end='')

这里首先将文件的内容读入一个列表,进行洗牌,然后迭代这个混洗列表。

您的代码的目的有点难以捉摸。由于这些线已经被随机化,所以在选择21到88之间的行数或者选择68行的任何其他范围之间没有区别,例如,你可以在洗牌后抓住前68行:

with open('Filename.txt') as f:
    lines = f.readlines()
    random.shuffle(lines)
    print(*lines[:68], sep='')