Q1: почему 1 не напечатано?
Это все же напечатало. Попробуй поспать подольше.
В2: Почему числа печатаются один за другим, я имею в виду, что когда печатается большее число, сразу меньшее число исчезает (что удивительно)?
Это потому, что вы используете возврат каретки \r
вместо перевода строки \n
, который возвращает курсор к началу строки, а не переводит его на следующую строку. Вы также можете перезаписывать данные в терминале, используя клавишу Backspace \b
, чтобы переместить курсор назад на один пробел.
В3: Почему запуск вышеуказанных кодов в терминале Linux имеет другой вывод?
Я не уверен, какой терминал вы имеете в виду. Некоторые терминалы не поддерживают перезапись, поэтому порядок очистки может повлиять на вывод.
Также посмотрите на строку документации по методу write
,
метод write (s) экземпляра idlelib.run.PseudoOutputFile
Напишите строку в поток.
Возвращает количество написанных символов (которое всегда равно
длина строки).
Возвращает длину строки, которую вы передали. В оболочке Python (REPL) все возвращаемые значения печатаются после возврата из функции. Попробуйте это в IDLE, где stdin и stderr печатают разными цветами:
>>> sys.stderr.write('x')
Но посмотрите, что произойдет, если вы запустите это в терминале,
>>> sys.stdout.write('abc\r')
4bc
Сначала он печатает abc
, затем возвращает курсор в начало строки. Затем он возвращает 4
, поскольку в строке было len 4, поэтому REPL в Python печатает его в текущем местоположении курсора, перезаписывая a
.