这是我的简短代码:
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仍然没有读到我放在那里的东西。我做错了什么?
答案 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='')