Почему во вложенном цикле не работает Python? - PullRequest
0 голосов
/ 28 февраля 2019

Внешний цикл foor выполняется только один раз.Я не могу обнаружить проблему, почему это происходит?

f=open("simpletextfile.txt")
for r in range(1,52):
    for line in f.readlines():
        print r

, где simpletextfile.txt содержит сообщение This a message!!.

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Файл исчерпан после вызова readlines, так как при последующих вызовах readlines не будет читать больше строк, так как все строки были прочитаны.Внутренний цикл с последующим выполнением, но не имеет ничего общего.Если вы хотите прочитать строки 52 раза и вывести r (я не знаю, почему - но все в порядке), сделайте следующее

with open('simpletextfile.txt') as f:
    lines = f.readlines()
    for r in range(1, 52):
        for line in lines:
            print r

Более того, хотя вы только читаете файл в этом примере (и Pythonзакроет его автоматически для вас), вы должны явно .close() сделать это самостоятельно или обернуть его вокруг оператора with, как указано выше, который закроет его в конце - это менее небрежно.

0 голосов
/ 28 февраля 2019

Когда вы звоните f.readlines() в первый раз, он вернет список с одним элементом: ['This a message!!'].Но когда вы звоните f.readlines() во второй раз и так далее, он вернет пустой список [].Поэтому, когда вы зацикливаетесь на нем, он вообще не зацикливается, потому что список пуст.Присвойте f.readlines() переменной, чтобы решить вашу проблему

f = open("simpletextfile.txt")
for r in range(1,52):
    lines = f.readlines()
    for line in lines:
        print r
0 голосов
/ 28 февраля 2019

Потому что вы не можете прочитать текстовый файл дважды.Таким образом, на первой итерации он читает файл и печатает «1» столько раз, сколько строк в вашем файле.Когда он переходит к r==2, он пытается вызвать f.readlines(), но, поскольку файл уже прочитан, он останавливает итерацию, даже не запуская ее.И так далее до r == 51.

Если вы объясните больше, что вы пытаетесь сделать, мы можем помочь более эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...