我有一个2000字的文本文件,每行一个字。我试图创建一个代码,每10秒从同一行的文本文件中打印两个随机单词。我的文本文件的开头部分如下所示:
slip
melt
true
therapeutic
scarce
visitor
wild
tickle
.
.
.
我写的代码是:
from time import sleep
import random
my_file = open("words.txt", "r")
i = 1
while i > 0:
number_1 = random.randint(0, 2000)
number_2 = random.randint(0, 2000)
word_1 = my_file.readline(number_1)
word_2 = my_file.readline(number_2)
print(word_1.rstrip() + " " + word_2.rstrip())
i += 1
sleep(10)
当我执行代码而不是打印两个随机单词时,它会从文本顶部开始按顺序打印所有单词。我不确定为什么会发生这种情况,因为number_1和number_2在循环内部,因此每次打印number_1和number_2时,应将两个单词更改为另外两个随机数。我不认为在循环之外替换number_1和number_2会起作用,因为它们将被固定为两个值,并且代码将继续打印相同的两个单词。有谁知道我可以做些什么来修复代码?
答案 0 :(得分:0)
readline()
不接受任何参数,只返回文件输入*中的下一行。相反,尝试使用readlines()
创建列表,然后从该列表中随机选择。所以在这里,你要word_list = my_file.readlines()
,然后从word_list
中选择随机元素。
*更正: readline()
确实采用要读取的字节数的参数。该函数的文档似乎没有明确说明这一点。谢谢E. Ducateme!
答案 1 :(得分:0)
my_file.readline(number_1)
没有做你想做的事。 readline的参数是您可以读取的行的最大大小(以字节为单位),而不是文件中该行的位置。
正如另一个答案所提到的,更好的方法是首先将行读入列表,然后从中随机选择单词:
from time import sleep
import random
my_file = open("words.txt", "r")
words = my_file.readlines()
i = 1
while i > 0:
number_1 = random.randint(0, 2000)
number_2 = random.randint(0, 2000)
word_1 = words[number_1]
word_2 = words[number_2]
print(word_1.rstrip() + " " + word_2.rstrip())
i += 1
sleep(10)