как напечатать текст в поле звездочки с петлей - PullRequest
2 голосов
/ 24 июня 2019

Как напечатать текст в поле звездочки с циклом

Пример, который я хочу:
input1: ввод текста
input2: максимум звезд
например:
input1 = Ваше имя
input2 = 3
вывод:

***********
*Your Name*
***********
this my code i have now
def function(text):
    """start"""
    name = len(text)
    num = int(input())
    for i in range(num):
        for j in range(name + 2):
            if i == 0 or j == 0 or i == num - 1:
                print("*", end="")
        print()
function(input())
output is
***********
*
***********

Что мне делать дальше.

Ответы [ 4 ]

0 голосов
/ 24 июня 2019

Вы можете построить ящик в списке, а затем подставить имя в средней строке:

name = "your name"
num  = 3

box              = ["*"+(" "*len(name))+"*"]*num
box[0] = box[-1] = "*" * (len(name)+2)
box[num//2]      = f"*{name}*"
print("\n".join(box))

***********
*your name*
***********
0 голосов
/ 24 июня 2019
def function(text):
    """start"""
    name = len(text)
    num = int(input())
    text_num = int((num - 1) / 2)

    for i in range(num):
        for j in range(name + 2):
            if i == 0 or i == num - 1:
                print("*", end="")
            elif i == text_num:
                if j == 0 or j == name + 1:
                    print("*", end="")
                else:
                    print(text[j-1], end="")
        print()
function(input())
0 голосов
/ 24 июня 2019

Другим вариантом является форматирование строки в отличие от символа.

Примерно так может работать:

def function(text):
    """start"""
    name = len(text)
    num = int(input())
    for i in range(num):
        if i == 0 or i == num - 1:
            print('*' * (name + 2))
        elif i == int(num / 2):
            print('*' + text + '*')
        else:
            print('*' + ' ' * name + '*')


function(input())

С num = 3 выхода:

***********
*your name*
***********

С num = 5 выходов:

***********
*         *
*your name*
*         *
***********
0 голосов
/ 24 июня 2019

Вы можете умножить строку."*" * 10 == '**********' - тогда вам не нужен внутренний цикл for.

Кроме того, вам нужно распечатать вещь в том виде, в каком она должна быть, а не делать границы сначала - вы можете 'просто наберите то, что уже напечатано.

def function(text):
    """start"""
    name_length = len(text) #renamed your variable, the name was confusing
    num = int(input())
    for i in range(num):
        if i == 0 or i == num - 1: #removed inner loop
            print("*" * (name_length+2))
        else:
            print("*{}*".format(text) #added printing the text and right border
function(input())

Вы не сказали, что должно произойти для большего числа.Я предположил, что имя должно быть повторено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...