繁体   English   中英

此Python代码块做什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM