Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Алгоритмы
Курсы ККДП
Дистрибутивы
Ссылки

HotLog


 
Вернуться
Тема: Подскажите по правильности загрузки решений задач, пожалуйста.
1
  1  Егоров Илья Валерьевич, 06 июня 2020 г. 21:20:00
      Тьфу. *вкуривает, *имеет, *обеспечивает. Пальцы машинально стремятся к М.
  2  Егоров Илья Валерьевич, 06 июня 2020 г. 21:11:03
      P.s. Почему лично я не в восторге от того, что в "Работа в системе" предлагается вариант с "fout.write(str(a+b))": это неявно навязывает начинающим, которые решили работать с файлами (не, конечно, стандартный поток ввода замещен дескриптором открытого файла, о чем явно намекает возможность стандартный поток ввода mmap'ать, так что на самом деле люди в любом случае работают с файлами, разница лишь в явности), возиться со строками. print при этом имеем более удобоваримую семантику, что обеспечиваем меньшее кол-во ошибок из-за банального ввода-вывода, давая сосредоточиться на самой задаче (проще, конечно, вообще не работать явно с файлами, но у всякого свои могут быть предпочтения).
  3  Егоров Илья Валерьевич, 06 июня 2020 г. 20:46:58
      Также приведу "а почему str(a+b) — эт ересь". Во-первых, print(str(a+b)) не имеет веской причины для использования, все аргументы дефолтно приводятся к строкам, можно было бы просто print(a+b). Во-вторых, fout.write(str(a+b)) — тоже не от большого ума, будто бы это 2 питон, официально умерший в начале этого года. Можно и просто print(a+b, file = fout), но почему-то оно не приводится.
  4  Егоров Илья Валерьевич, 06 июня 2020 г. 20:42:01
      Иванов-Смоленский, вам бы разобраться с файловым вводом-выводом и форматом входных данных. В A+B числа расположены на одной строке, поэтому-то с вашим вариантом через line и не должно проходить. Более того, у вас сам код неверен. Во-первых, делая for line in f.read() вы проходитесь не по строкам, а по символам, ибо .read() считывает весь файл. Пример: для файла "42\r\n23\r\n" вариант с хождением по символам выведет 11. Во-вторых, сама проверка на то, что все символы есть цифры, также не имеет особого смысла, ибо можно было бы завернуть в try-except, что обычно и делают. int не только просто выпарсивает число из строки (дефолтно в десятичной системе счисления, можно указать и любую другую базу, хоть 36, из-за чего сей ваш if тем более бесполезен в нестандартных ситуациях), но еще и удаляет лишние пробельные символы по краям (как если бы мы делали .strip()) и вкуриваем различные виды цифр помимо арабских. Из-за чего это особенно важно: .readline(), включая неявный вызов через итерирование фориком, возвращает строку _вместе с символом перевода строки_. Например, для файла вида "123\n456" первый line будет вида "123\n", а не "123". Ваша проверка попросту такое не пропустит.
  5  Беляев Сергей Николаевич, 06 июня 2020 г. 11:40:55
      В разделе "Работа в системе" (ссылка в меню слева) можно посмотреть примеры. Работать с файлами input.txt и output.txt вовсе не обязательно.
  6  Иванов-Смоленский Михаил, 05 июня 2020 г. 14:08:40
      f = open('input.txt')
a, b = map(int, f.readline().split())
print(str(a+b))

А вот так прошло... Непонятно абсолютно.
  7  Иванов-Смоленский Михаил, 05 июня 2020 г. 14:04:46
      Пробую:
f = open('input.txt')

summ = 0
for line in f.read():
if line.isdigit():
line = int(line)
summ += line
f.close()
f = open('output.txt', 'w')
f.write(str(summ))
f.close()


Или:

f = open('input.txt')

summ = 0
for line in f.read():
if line.isdigit():
line = int(line)
summ += line
print(summ)

Ему все не нравится. А как правильно?
Спасибо.
1

Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!

Красноярский краевой Дворец пионеров, (c)2006 - 2020, E-mail: admin@acmp.ru