Как печатать по пустому перевернутому шаблону

Я пытаюсь напечатать этот следующий шаблон, но не могу сформулировать логику

Мой код:

for i in range(1,row+1):
    if i == 1:
        print(row * '* ')
    elif i<row:
        print( '* ' + ((row - 3) * 2) * ' ' + '*')
        row = row - 1
    else:
        print('*')

Ожидаемый результат:

* * * * * * * *
*           *
*         *
*       *
*     *
*   *
* *
*

Но мой код дает мне ненормальный вывод:

* * * * * * * * 
*           *
*         *  
*       *    
*
*
*
*

Пожалуйста, объясните ((row - 3) * 2) - что у вас там за намерение?

LMD 07.05.2022 13:54

Вы одновременно считаете «i» и «строите» вниз, пока они не встретятся примерно посередине.

Michael Butscher 07.05.2022 13:57

@LMD: я пытался в блокноте ++ проверить, сколько пробелов мне нужно добавить, чтобы моя вторая строка ожидала вывода

cafopa2172 07.05.2022 14:00
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
52
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

row=10
for i in range(1,row):
    if i == 1:
        print(row * '* ')
    elif i < row:
        print('* ' + (row-2)*2 * ' ' + '*')
        row = row-1
    elif i > row-2:
        print('* ' + (row - 2) * 2 * ' ' + '*')
        row = row - 1

Выход:

* * * * * * * * * * 
*                 *
*               *
*             *
*           *
*         *
*       *
*     *
*   *

Process finished with exit code 0

Надеюсь это поможет

import math

row = 8;
for i in range(1,row+1):
    if i == 1:
        print(row * '* ')
    elif i<(row * row) / (math.pi / math.sqrt(7)):
        print( '* ' + ((row - 3) * 2) * ' ' + '*')
        row = row - 1
    else:
        print('*')

Выход:

* * * * * * * * 
*           *
*         *
*       *
*     *
*   *
* *
*
Ответ принят как подходящий

Ответ @stacker отличный, но математически немного излишний. Это должно сработать так же хорошо:

row = 8
print(row * '* ')
for i in range(1,row - 1):
    rowlength = (row - i) * 2 - 3
    print('*', end='')
    print(rowlength * ' ', end='')
    print('*')
print('*')

Другие вопросы по теме