Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Цикл работает бесконечно

Даниил Шестаков Ученик (185), открыт 2 дня назад
Задание: На диске существует файл test.txt. Он содержит несколько записей, в каждой из которых 2 поля: имя студента и его оценка за экзамен. Напишите программу, которая удаляет запись о студенте по искомому имени.

Вот мой код:

import os

old_file = open('test.txt','r',encoding='utf-8')
new_file = open('new_file.txt','w',encoding='utf-8')

need_name = input()

name = old_file.readline()
found = False

while name!='':
mark = old_file.readline()
if name==need_name:
found = True
else:
new_file.write(f'{name}\n')
new_file.write(f'{mark}')

print('Файл обновлён' if found else 'Такого имени не найдено')

old_file.close()
new_file.close()

os.remove('test.txt')
os.rename('new_file.txt','test.txt')


Но когда я запускаю программу и ввожу требуемое имя, во временном файле new_file.txt бесконечно выполняется цикл и печатаются тысячи строчек.
Почему цикл выполняется бесконечно?
2 ответа
Святослав Ясновидец Мыслитель (7925) 2 дня назад
import os

old_file = open('test.txt', 'r', encoding='utf-8')
new_file = open('new_file.txt', 'w', encoding='utf-8')

need_name = input()

name = old_file.readline().strip() # Считываем имя и удаляем лишние пробелы и переносы строк
found = False

while name: # Цикл выполняется, пока есть строки для чтения
mark = old_file.readline().strip() # Считываем оценку и удаляем лишние пробелы и переносы строк
if name == need_name:
found = True
else:
new_file.write(f'{name}\n')
new_file.write(f'{mark}\n') # Добавляем перенос строки после оценки

name = old_file.readline().strip() # Считываем следующее имя

print('Файл обновлён' if found else 'Такого имени не найдено')

old_file.close()
new_file.close()

os.remove('test.txt')
os.rename('new_file.txt', 'test.txt')
Святослав Ясновидец Мыслитель (7925) 2 дня назад
Вот я помог тебе? ??можешь мне перевести денег на карту за помощь? 2204120122128917?
София Мастер (1096) 2 дня назад
Вы в начале кода устанавливаете name = old_file.readline(), то есть на протяжении всего файла у вас переменная name не меняется и ее значение остается первой строчкой искомого файла (то есть оно никогда не равно ", то есть цикл никогда не остановится). Вам нужно продублировать эту строчку непосредственно в цикл
Похожие вопросы