Печать строк в текстовом файле с заданными номерами строк - PullRequest
0 голосов
/ 08 ноября 2018

У меня проблемы с оператором цикла while для вопроса, приведенного ниже. Это для txt.file.

'Напишите программу, которая позволяет пользователю перемещаться по строкам текста в любом текстовом файле. Программа запрашивает у пользователя имя файла и копирует строки текста из файла в список. Затем программа печатает количество строк в файле и запрашивает у пользователя номер строки. Фактические номера строк варьируются от 1 до количества строк в файле. Если вход равен 0, программа завершает работу. В противном случае программа печатает текст в этом номере строки. '

Пожалуйста, смотрите мой код.

enterfile = input("Enter the file name: ")
file = open(enterfile, 'r')
linecount = 0
for line in file:
    linecount = linecount + 1
print("The number of lines in this txt. file is", linecount)
linenum = 0
while True:
num = int(input("Please enter a line number or press 0 to quit: "))
if num >=1 and num <= linecount:
    file = open(enterfile, 'r')
    for lines in file:
        linenum = linenum + 1
        if linenum == num:
            print(lines)
else:
    if num == 0:
        print("Thanks for using the program")
        break

Когда я запускаю программу, номер строки не печатается после ввода номера строки.

Очевидно, я не правильно использую цикл while. Может кто-нибудь сказать, пожалуйста, что я здесь делаю не так? Могу ли я использовать здесь функцию def?

Спасибо!

Ответы [ 4 ]

0 голосов
/ 08 ноября 2018

функция readlines () возвращает список, содержащий строки, а затем печатает значение индекса в соответствии с пользовательским вводом.

file = input("Enter the file name: ")
text_file = open(file, "r")
lines = text_file.readlines()
print (len(lines))
while True:
    linenumber = int(input("Please enter a line number or press 0 to quit:  "))
    if linenumber == 0:
        print("Thanks for using the program")
        break
    elif 1 <= linenumber <= len(lines) :
      print (lines[linenumber- 1])
    else:
        print("Please enter valid line number")
text_file.close()
0 голосов
/ 08 ноября 2018

Поместите linenum = 0 в цикл while, и ваша проблема решена.

0 голосов
/ 08 ноября 2018

Похоже, вы пропустили первый шаг назначения после ввода

копирует строки текста из файла в список

С этим у вас будет

with open(enterfile) as f:
    lines = [line.rstrip() for line in f]
# continue on from here 

Теперь, забудьте, что у вас даже есть файл, вы можете использовать len(lines) и lines[number-1], чтобы получить общее количество строк и определенную строку соответственно

0 голосов
/ 08 ноября 2018

Переместить строку linenum = 0 внутри цикла While True:.

Переменная linenum должна быть сброшена в 0 (linenum = 0), когда программа повторно входит в цикл. В противном случае переменная linenum всегда будет увеличиваться и иметь значение, превышающее num, и никогда не будет вызывать оператор if для вывода строки с этим номером.

Ваш код с linenum = 0 в цикле:

enterfile = input("Enter the file name: ")
file = open(enterfile, 'r')
linecount = 0

for line in file:
    linecount = linecount + 1

print("The number of lines in this txt. file is", linecount)

while True:
    linenum = 0

    num = int(input("Please enter a line number or press 0 to quit: "))
    if num >=1 and num <= linecount:
        file = open(enterfile, 'r')
        for lines in file:
            linenum = linenum + 1
            if linenum == num:
                print(lines)
    else:
        if num == 0:
            print("Thanks for using the program")
            break

Альтернативный метод:

enterfile = input("Enter the file name: ")

with open(enterfile) as f:
    lines = [line.rstrip() for line in f]

print("The number of lines in this txt. file is", len(lines))

while True:
    num = int(input("Please enter a line number or press 0 to quit: "))

    if num > 0 and num < len(lines) + 1:
        print(lines[num - 1]) 
    elif num == 0:
        print('Thanks for using the program.')
        break
...