2017-08-04 77 views
0

我有一個包含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

readline()不接受任何參數,只是返回文件輸入*中的下一行。相反,嘗試使用readlines()創建一個列表,然後從該列表中隨機選擇。所以在這裏,你會製作word_list = my_file.readlines(),然後從word_list中選擇隨機元素。

*更正:更正:readline()確實需要一個讀取字節數的參數。該函數的文檔似乎沒有明確說明這一點。感謝E. Ducateme!

+0

謝謝!有用。 – iza

+1

@Dan Waxman ......小調整......'.readline()'不帶參數,但大多數人不會使用它。 '.readline()'的文檔沒有明確說明,但是它說:'examplefile.readline(size = -1,/)'。將非負大小放入方法將返回當前行的該字節數。 –

+1

@ E.Ducateme謝謝!在發佈之前,我已經簡要地檢查了IO文檔,並且沒有看到列出的任何參數,這使我對他的代碼如何工作感到困惑。我糾正了答案。 –

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) 
+2

一個小改進也可以簡單地用'word_1 = random.choice(words)'來選擇一個隨機單詞,而不是使用'random.randint()'來選擇一個整數然後漏斗該整數作爲索引在列表中的索引位置查找單詞。這不是OP的問題,但包括它作爲一個細微差別。 –

+0

謝謝!!!!!!!!!!! – iza

+0

如果你想避免選擇兩個相同的單詞(RNG可以做到這一點),然後檢查兩個數字是否相等,或者使用'number_1 = random.randint(0,2000)'和'number_2 =(number_1 + random.randint(0,1999))%2000' – rossum

相關問題