|
|
|
|
|
|
|
Вернуться
| 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) Ему все не нравится. А как правильно? Спасибо.
|
|
|
Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!
| | | |