Python. Отображение текста из файла фрагментами по 20 строк при каждом нажатии ENTER - PullRequest
0 голосов
/ 18 сентября 2010

Это код, который у меня есть на данный момент

print "Please input the filename:"
n = raw_input()
f = open(n,"r")
x = 0
for line in f.readlines():
    print line
    x+=1
    if x % 20 == 0:
        break
        q = raw_input()
        if q == "":
            x+= 20
        continue

Что должна делать программа: 1) Запросить имя файла 2) Прочитать файл 3) Распечатать первые 20 строк файла 4)Прекратите работу после первых 20 строк и дождитесь нажатия клавиши Enter. 5) Если нажата Enter, отобразятся следующие 20 строк файла (20-> 40 и т. Д.)

Текущая проблема: цикл не выполняетсяперезапустить, он показывает только первые 20 строк, а затем перестает работать.

Ответы [ 2 ]

1 голос
/ 18 сентября 2010

Как правило, вы хотите сделать паузу каждые 20 строк. В настоящее время вы выходите из цикла после первых 20 строк.

for line in f:
    print line
    x += 1
    if x % 20 == 0:
        raw_input("Hit enter")

должно хватить.

0 голосов
/ 18 сентября 2010
filename = raw_input("Please enter the file name: ")
with open(filename) as f:
    lines = f.readlines()
    for i in xrange(0, len(lines), 20):
        print lines[i:i+20]
        raw_input("Press Enter for more")

Это считывает весь файл в память, поэтому вы можете не использовать фрагменты, если это огромный файл.Но если это огромный файл, вы вряд ли захотите пройти по нему двадцать строк за раз;)

Основное изменение заключается в том, что мы открываем файл с помощью оператора with.Это гораздо приятнее, чем использование open / close, и гарантирует, что файл всегда будет закрыт.

в коде, который вы опубликовали, когда вы выполняли break, вы выходили из своего взгляда.break выходит из цикла, поэтому вы хотите использовать его только для этой цели.just calling a blocking operation like raw_input` достаточно, если вам просто нужно приостановить выполнение по какой-то причине (например, ожидание пользователя).

также, continue совершенно не нужен.В конце тела цикла у него нет выбора, кроме continue

Что вы думаете о строках if q == "": x += 20?во-первых, это должно быть просто if not q: x += 20 (пустая строка (например, пустые списки / dicts / tuples) оценивается как False), а во-вторых, это будет пропускать следующие 20 строк.Это требование, которым вы не поделились?

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