Вывод в одну строку из разных print в python
Вопрос задан
Изменён 3 месяца назад
Просмотрен 44k раз
Мне нужно сделать так, что бы функция print()
, написаная таким вот обрзом:
print('a') print('b') print('c')
выводила что то такое:
> C:\Users\User\Documents> python test.py abc
Выводиться должно в одной строке, но print()
в коде в разных строках!
Буду очень рад, если кто-нибуть поможет.
- python
- python-3.x
1
Функция print()
имеет такие ключевые параметры:
sep=
– когда выводится более значений, каким символом или строкой их отделить' '
),end=
– какой символ или строка выводить после вывода (всех) значений
(стандартно переходом на новую строку, т.е. строкой'\n'
),file=
– в какой файл выводить значения
(стандартно на экран, т.е.sys.stdout
),flush=
– если поток (сохранен в буфере) немедленно вывести в файл
(стандартно «нет», т.е.False
).
В вашем случае хотите после вывода значения остаться в той же строке, значит, вы не хотите стандартного окончания переходом на новую строку (
), но окончить чем-то другим (пробелом, запятой, и тд.) тоже нет.
Потому окончите вывод пустой строкой (''
):
print('a', end='') print('b', end='') print('c')
2
Самый обычный способ:
print('a' + 'b' + 'c')
2
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Урок 11.
Вывод текста в Python в одну или несколько строкВ данном уроке я научу вас особенностям вывода строк текста в одну строку или в несколько строк. Для чего это надо.
Обычно программисты не пишут слишком длинные строки программного кода, так как узкие строчки проще читать и анализировать, искать в них ошибки или исправлять сценарии.
Но если писать узкие строчки кода, а в итоговом результате мы должны получить длинные строчки, для этого используется вариант с добавлением запятой между соседними строчками.
Практический пример
Создаем на рабочем столе файл test6.py
Файл сохраняем в кодировке UTF (подробно про кодировку — в уроке 5). Пишем руками в него следующий программный код:
# -*- coding: utf- 8 -*- bukva1 = u"В" bukva2 = u"л" bukva3 = u"а" bukva4 = u"д" bukva5 = u"и" bukva6 = u"м" bukva7 = u"и" bukva8 = u"р" bukva9 = u"Л" bukva10 = u"е" bukva11 = u"н" bukva12 = u"и" bukva13 = u"н" # Первый вариант вывода - в несколько строк print bukva1 + bukva2 + bukva3 + bukva4 + bukva5 + bukva6 + bukva7 + bukva8 print bukva9 + bukva10 + bukva11 + bukva12 + bukva13 print "-" * 10 # Второй вариант вывода - в одну строку, через запятую между строками print bukva1 + bukva2 + bukva3 + bukva4 + bukva5 + bukva6 + bukva7 + bukva8, print bukva9 + bukva10 + bukva11 + bukva12 + bukva13 print "-" * 20
Краткое пояснение
Мы создаем переменные bukva1, bukva2 и т. д. (подробнее о том, что такое переменная и как она работает, мы говорили в уроке 9). И присваиваем каждой переменной по одной букве имени. Затем выводим имя двумя вариантами. Также под каждым вариантом вывода я показал, как можно отрисовать пунктирную линию — мы просто знак «-» умножаем на n количество раз.
Теперь открываем программу PowerShell и прописываем команду python desktop/test6.py
У вас должно получиться следующее:
Как вы видите, в первом варианте написания кода запятая между строками не ставилась. И в итоге мы получили отображение имени и фамилии на разных строках.
А во втором варианте – между строками поставили запятую. И как результат – имя и фамилия – в одну строку.
Также я показал, как можно отграничивать разные блоки кода пунктирной линией. Для этого символ тире умножаем на 15 или 20, и компьютер в программе PowerShell прописывает этот символ 15 или 20 раз, формируя пунктирную линию.
Также заметьте, что после первого варианта я отступил одну строку и потом ввел пунктирную линию, а после второго варианта в программном коде я прописал пунктирную линию сразу после текста. На экране при выполнении программа выбрасывает первый промежуток, не делая никаких отступов и в первом и во втором случае. Поэтому вы можете писать код с промежутками — для лучшего его восприятия. Программа удалит эти промежутки.
Домашнее задание
Попробуйте вместо букв Владимир Ленин подставить буквы Владимир Путин, Иосиф Сталин, Никита Хрущев и т.д.
Как вы можете заметить, достаточно только поменять буквы в имени, чтобы присвоить их переменным bukva
, чтобы на экране вывелись другие слова. При этом код в команде print
менять не надо, за исключением добавления или удаления переменных по количеству букв в имени.
В следующем уроке мы продолжим учиться выводить текст и буквы в Python 2.7 разными способами — перейти в урок 12.
Как печатать без новой строки в Python?
Улучшить статью
Сохранить статью
Нравится Статья
UPENDRA BARTWAL,
ученый
11 опубликованных статей
Улучшить статью
Сохранить статью
Нравится Статья
Обычно люди, переходящие с C/C++ на Python, задаются вопросом, как напечатать две или более переменных или инструкций, не переходя на новую строку в python. Поскольку функция python print() по умолчанию заканчивается новой строкой. Python имеет предопределенный формат, если вы используете print(a_variable), то он будет
Например:
Python3
|
В результате получится:
гиков geeksforgeeks
Но иногда может случиться так, что мы не хотим переходить на следующую строку, а хотим печатать на той же строке. Итак, что мы можем сделать?
Например:
Ввод: [geeks,geeksforgeeks] Вывод: выродки выродки forgeeks Вход: а = [1, 2, 3, 4] Вывод: 1 2 3 4
Обсуждаемое здесь решение полностью зависит от используемой вами версии Python.
Python
print " 0044 |
выродки выродки 1 2 3 4Печать без новой строки в Python 3. x
python3
3 выродки выродки 1 2 3 4Печать без новой строки в Python 3. x без использования цикла for , 2 , 3 , 4 , 5 , 6 ]
90 * л)
|
Вывод
1 2 3 4 5 6
Печать без новой строки Использование модуля Python sys
Чтобы использовать модуль sys, сначала импортируйте ключевые слова с помощью модуля import sy. Затем используйте метод stdout.write(), доступный внутри модуля sys, для печати ваших строк.
Работает только со строкой. Если вы передадите число или список, вы получите TypeError.
Python3
3 s3 stdout.write( "это лучший сайт для программирования!" ) |
Вывод
GeeksforGeeks - лучший сайт для программирования!
Последнее обновление: 03 апр, 2023
Нравится статья
Сохранить статью
python — вывод в ту же строку, перезаписывающая предыдущий вывод?
спросил
Изменено 2 месяца назад
Просмотрено 237 тысяч раз
Я пишу FTP-загрузчик. Часть кода выглядит примерно так:
ftp.retrbinary("RETR " + имя_файла, процесс)
Я вызываю функциональный процесс для обработки обратного вызова:
процесс определения (данные): print os.path.getsize(file_name)/1024, 'КБ /', размер, 'КБ загружено!' файл.запись(данные)
и вывод примерно такой:
1784 КБ / 1829 КБ загружено! 1788 КБ / 1829 КБ загружено! и т. д...
, но я хочу, чтобы он напечатал эту строку и в следующий раз перепечатал/обновил ее, чтобы она отображалась только один раз, и я видел ход этой загрузки.
Как это сделать?
- питон
- обновление
- индикатор выполнения
4
Вот код для Python 3.x:
print(os.path.getsize(file_name)/1024+'KB / '+size+' KB загружено!', end='\r')
Здесь работает ключевое слово end=
— по умолчанию print()
заканчивается символом новой строки ( \n
), но его можно заменить другой строкой. В этом случае завершение строки возвратом каретки вместо этого возвращает курсор в начало текущей строки. Таким образом, нет необходимости импортировать 9Модуль 0043 sys для такого простого использования. print()
на самом деле имеет ряд ключевых аргументов, которые можно использовать для значительного упрощения кода.
Чтобы использовать тот же код на Python 2.6+, поместите следующую строку вверху файла:
from __future__ import print_function
10
Если вы хотите изменить только одну строку, используйте \r
. \r
означает возврат каретки. Его эффект заключается исключительно в том, чтобы вернуть курсор в начало текущей строки. Ничего не стирает. Точно так же \b
можно использовать для перехода на один символ назад. (некоторые терминалы могут не поддерживать все эти функции)
import sys процесс определения (данные): size_str = os.path.getsize(file_name)/1024, 'КБ /', размер, 'КБ загружено!' sys.stdout.write('%s\r' % size_str) sys.stdout.flush() файл.запись(данные)
4
Ознакомьтесь с документацией модуля curses и HOWTO модуля curses. \s]», » «, self.text)) # Напечатать новый текст строки = мин(self.text.count(«\n»), text.count(«\n»)) self.moveup(строки) sys.stdout.write(текст) селф.текст = текст репринтер = репринтер() reprinter.reprint(«Foobar\nBazbar») reprinter.reprint(«Foo\nbar»)
2
Я использую spyder 3.3.1 — windows 7 — python 3.6 хотя промывка может и не понадобиться. на основе этой публикации — https://github.com/spyder-ide/spyder/issues/3437
#работает в консоли spyder ipython - \r в начале строки, end="" время импорта импорт системы для я в диапазоне (20): время сна (0,5) печать(f"\rnumber{i}",end="") sys.stdout.flush()
2
для перезаписи предыдущей строки в python все, что вам нужно, это добавить end=’\r’ к функции печати, проверить этот пример:
время импорта для j в диапазоне (1,5): print('ожидание: '+j, end='\r') время сна(1)
1
Я обнаружил, что для простого оператора печати в Python 2. 7 просто поставьте запятую в конце после вашего '\r'
.
print os.path.getsize(file_name)/1024, 'КБ /', размер, 'КБ загружено!\r',
Это короче, чем другие решения, отличные от Python 3, но его сложнее поддерживать.
1
Вы можете просто добавить ‘\r’ в конце строки плюс запятую в конце функции печати. Например:
print(os.path.getsize(file_name)/1024+'KB / '+size+' KB загружено!\r'),
2
Python 3.9
для j в диапазоне (1,5): print('\rwaiting : '+str(j), end='')
Спасибо Bouke Versteegh за их ответ, который дает отличную отправную точку. Однако я обнаружил проблемы с ним, когда sys.stdout
не сбрасывался, как должно быть, а перепечатанный текст неоднократно перемещался вниз по экрану.
Мое решение здесь является развитием этого ответа, переработанным для устранения этих проблем и с методом __call__
для более удобного вызова повторной печати.
Протестировано и работает на Python 3.8
import re, sys Репринтер класса: защита __init__(сам): селф.текст = '' def написать (я, текст): """Записывает текст в стандартный вывод.""" sys.stdout.write(текст) sys.stdout.flush() защита cursor_prev_line (я): """Перемещает курсор на строку вверх.""" self.write("\x1b[A") защита cursor_prev_line_start (я): """Перемещает курсор в начало предыдущей строки.""" self.write("\x1b[F") определение cursor_line_start (я): """Перемещает курсор в начало текущей строки.""" self.write("\r") определение cursor_text_start (я): """Перемещает курсор в начало текущего текста.""" num_newlines = self.text.count("\n") если не num_newlines: вернуть self.cursor_line_start() для _ в диапазоне (num_newlines+1): self.cursor_prev_line_start() деф стереть(сам): """Удаляет текущий текст, заменяя непробельные символы пробелами.