到目前为止,我有这个,打印出我的列表中的每个单词,但我试图随机打印一个单词。有什么建议吗?
def main():
# open a file
wordsf = open('words.txt', 'r')
word=random.choice('wordsf')
words_count=0
for line in wordsf:
word= line.rstrip('\n')
print(word)
words_count+=1
# close the file
wordsf.close()
答案 0 :(得分:3)
尝试:
print random.choice([x.rstrip() for x in open("words.txt")])
请注意,在选择随机行之前,这会从每行中删除'\n'
;一个更好的解决方案留给读者练习。
答案 1 :(得分:1)
要在每行打印一个随机单词,您的循环可以是:
for line in wordsf:
word = random.choice(line.split())
print(word)
如果有的行只有空格,你还需要跳过这些:
for line in wordsf:
if line.isspace(): continue
word = random.choice(line.split())
print(word)
您拥有的计数部分似乎是正确的,但与您的问题无关。
编辑:我认为你的Q意味着不同的东西(正如其他A也解释的那样):你想从文件中选择随机的行,而不是随机的每一行的字。在这种情况下,其他A是正确的,但它们将O(N)
辅助内存用于N
行的文件。有一个很好的算法,因为Knuth从流中选择一个随机样本,而不事先知道它有多少项(不幸的是它需要生成N
个随机数,所以如果你有足够的内存,它比较简单的一个慢。后者......但是考虑它仍然很有趣! - )......:
n = 0
word = None
for line in wordsf:
n += 1
if random.randrange(n) == 0:
word = line
print(word.strip())
基本上,在每一行n
,我们选择它以1.0/n
的概率替换前一个(如果有的话) - 所以第一次概率为1(确定性),第二次概率为0.5,依此类推。我只是在结束时进行剥离,因为剥离后来被替换的临时选择会浪费精力;我通过生成一个包含0和n-1之间的均匀概率的随机数来避免划分和浮点麻烦(所以随机数为0的概率是1/n
) - 小问题,但是从那以后他们不会使代码变得不那么清晰,我们也可以照顾它们; - )。
答案 2 :(得分:0)
import random
def main():
wordsf = open('words.txt', 'r')
words = [line.rstrip('\n') for line in wordsf]
wordsf.close()
random_number = random.randint(0, len(words)-1)
random_word = words[random_number]
print random_word
这很好用,但如果文件wordsf太大,那么我认为你会开始遇到内存问题,但我认为这对大多数情况都应该没问题
希望这有帮助。