Если вы хотите перебирать строки по одной, вы делаете это:
for line in file:
do_something_with(line)
Ваша вторая версия не работает, потому что все, что вы делаете, это переназначаете локальную переменную user_input
на каждую строку снова и снова, так что в конце у вас просто есть последняя.
Вам нужно на самом деле сделать что-то со строкой, прямо в цикле. Означает ли это, что вы пытаетесь сделать это, обрабатывать его и записывать какие-то выходные данные, или добавлять его в список, или в файл, или в какую-то другую коллекцию для дальнейшего использования.
Например, если вы строите набор всех слов в файле, вы можете сделать это:
words = set()
for line in file:
words |= set(line.split())
Если вы хотите прочитать весь файл сразу, чтобы получить список всех строк, с другой стороны, вы делаете это:
lines = file.readline()
… или это:
lines = list(file)
Если вам нужно циклически повторять строки или обращаться к ним в произвольном порядке, это может быть очень полезно.
Если нет, то что бы вы ни хотели сделать с lines
, вы, вероятно, могли бы просто сделать вместо этого file
, так что вы тратите время и память на построение этого списка.
Ваш код смешивает два:
for line in file:
user_input = file.readline()
Другими словами, для каждой строки в файле вы пытаетесь прочитать весь файл. Это не имеет никакого смысла. Либо сделайте что-нибудь с каждой строкой, либо прочитайте весь файл только один раз.