Чтобы напечатать одно случайное слово в строке, ваш цикл может быть:
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, также интерпретированные): вы хотите выбрать случайную строку из файла, а не случайное слово из каждая строка. В этом случае остальные А верны, но они занимают O(N)
вспомогательную память для файла N
строк. Есть хороший алгоритм, благодаря тому, что Кнут выбирает случайную выборку из потока, не зная заранее, сколько у него элементов (к сожалению, для этого нужно генерировать 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
) - незначительные проблемы, но так как они не не делайте код менее понятным, мы могли бы позаботиться о них; -).