[英]What does this block of Python code do?
我正在编写一个python hangman程序,并且希望能够从文件中随机生成一个单词,并且它可以工作。 但是我从一个网站上获得了这段代码,它可以帮助我完成我需要做的事情,但是我不知道该怎么做 。
谢谢
offset = random.randint(0, os.stat(filename)[6]) # ?????
fd = file(filename, 'rb')
fd.seek(offset)
fd.readline()
return fd.readline()
os.stat(filename)[6]
仅返回由filename
命名的filename
的大小(以字节为单位)。 您可以在文档中阅读有关os.stat()
更多信息。
random.randint(...)
生成一个介于0和n
之间的随机整数,其中n
是通过os.stat()
获得的文件的大小。
然后,代码将查找到文件中的那个(随机)位置。 很有可能这个位置在一行的中间。 因此,代码读取部分行并将其丢弃。 然后读取下一行并返回。
最后,代码有一个bug:如果随机位置落在文件的最后一行,则第二个readline()
将无任何内容可读取。
编辑:另外,正如@Russell Borogove在评论中指出的那样,此方法不能确保以相等的概率选择线。
为了扩展aix的答案,在文件的“范围”内有一个随机整数后,我们使用fd.seek(offset)
转到该位置。 我们使用fd.readline()
删除我们所在的行,然后移至下一行。 然后,我们使用fd.readline()
返回当前所在的整行。
请注意,如果最后到达文件的最后一行,则将返回一个空字符串。 为了演示将偏移量设置为os.stat(filename)[6] - 1
并使用两次readline。
我试图将其添加为注释,但是无法包含代码示例。
这是您修复的最后一行/第一行错误中包含的代码:
size = os.stat(filename)[6]
offset = random.randint(0, size) # ?????
fd = file(filename, 'rb')
fd.seek(offset)
fd.readline()
if fd.tell() == size:
fd.seek(0)
return fd.readline()
它不能解决@ russell-borogove所述的均匀性问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.