Как центрировать текст в Python 3 после ввода ()? - PullRequest
0 голосов
/ 02 сентября 2018

Я не могу найти что-то, что действительно помогает онлайн, поэтому я решил спросить себя. У меня есть следующий код:

username = input()
username = username.capitalize()
print("Hello " + username ) # I want this to be centered 

Я хочу, чтобы оператор print центрировался на любой консоли, на которой он запущен. Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Это две части.


Во-первых, вам нужно получить ширину консоли. Вы делаете это с shutil.get_terminal_size.

Поскольку не всегда возможно получить ширину консоли - в этом отношении, может даже не быть быть единица (например, если стандартный вывод вашей программы перенаправлен в файл и даже не есть терминал), он вернется к 80 столбцам (хотя вы можете переопределить это, если хотите):

cols, rows = shutil.get_terminal_size()

Теперь вы просто center строка в этой ширине. Тот факт, что строка включает в себя пользовательский ввод, не имеет значения. После объединения "Hello " и username вы получите str, который работает так же, как и любой другой строковый объект. Итак:

print(("Hello " + username).center(cols))

Если возможно, что ввод пользователя будет слишком длинным, чтобы поместиться в одну строку, сначала нужно обернуть его, а затем отцентрировать строки. Для этого вы можете использовать модуль textwrap:

for line in textwrap.wrap("Hello " + username, cols):
    print(line.center(cols))
0 голосов
/ 02 сентября 2018

Вы можете использовать os.get_terminal_size().columns, чтобы получить количество столбцов в терминале, а затем распечатать необходимые пробелы для централизации текста:

import os
def print_centre(s):
    print(' ' * ((os.get_terminal_size().columns - len(s))//2) + s)

hello there


Некоторые улучшения (как указал abarnert):

  1. shutil.get_terminal_size более надежен, чем os.get_terminal_size.
  2. Вы можете использовать s.center(...) для большей читаемости.

Что дает более точное решение:

import shutil
def print_centre(s):
    print(s.center(shutil.get_terminal_size().columns))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...