@William03

Как «корректно» обрабатывать концы строк?

Есть одна интересная задача:
Ограничение по времени: 2 секунды
Ограничение по памяти: 256 Мбайт
Работа со строками. Дана последовательность из N строк произвольной длины. Необходимо для каждой строки определить ее последний символ.
Формат входных данных:
В первой строке содержится число N(1 <= N <= 100).
В следующих N строках содержатся произвольные последовательности символов.
Формат выходных данных:
N строк, в каждой из которых содержится последний символ соответствующей строки в исходном файле.
Пример входных и выходных данных:
task2.in
5
adeetd
awt6
shekueywul*
jkueyeskuy
atgs
task2.out
d
6
*
y
s
Примечание: входной файл - task2.in ; выходной - task2.out
Посмотрел, увидел, думаю: Проще некуда. Код моего решения снизу.
В текстовых файлах решение работает отлично.
Правда, есть одна важная особенность - система, тестирующая ответы, называется Yandex Contest.
Копирую код, кликаю "отправить", а мне приходит сообщение об ошибке при прохождении первого же теста (того, что сверху) - неверный ответ.
Я все думал, думал и думал ... Прочитал в инструкции:
Если ваша программа читает файл по одному байту и явно обрабатывает формат переноса строк Windows, т. е. строки заканчиваются двумя байтами 13 10 (\r\n), то некорректная обработка концов строк может привести к получению вердикта WA или PE.
Так вот, вопрос: как это исправить?
with open('task1.in', 'r') as f_o:
	lines = f_o.readlines()
	del lines[0]
with open('task1.out.txt', 'a') as f_o:
	for line in lines:
		if line == lines[-1]:
			f_o.write(line[-1])
		else:
			f_o.write(line[-2] + '\n')
  • Вопрос задан
  • 282 просмотра
Решения вопроса 1
adugin
@adugin Куратор тега Python
import os

with open('task2.in', 'rt') as fi, open('task2.out', 'wt') as fo:
    num = int(next(fi).strip())
    out = (line.strip()[-1] for _, line in zip(range(num), fi))
    fo.write(os.linesep.join(out))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
lines = f_o.readlines()
словишь привет при большом файле

w = open('write', 'a')

with open('task1.in') as f:
     for index, line in enumerate(f):
          if index == i:
              num = int(line.strip())
           while index < num:
                w.write(line.strip()[-1]+'\n')
w.close()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы