Как написать консольную программу, которая выведет в консоль букву “V”?

Есть задание: Напишите консольную программу, которая выведет в консоль букву “V”, высота которой вводится с клавиатуры. Пример вывода для высоты 5 представлен ниже: Пример

Самый удачный вариант кода:

h = int(input('Введите высоту фигуры: '))
y = h // 2

for i in range(0, h):
    print(' ' * i + 'V', ' ' * (y - i + 3 + h % 2),  ' ' * (y - i + 3 + h % 2) + 'V')

введите сюда описание изображения


Ответы (4 шт):

Автор решения: Sergey K.

В приведенной Вами попытке решения есть две проблемы:

  1. Последнюю строку нужно рисовать не в цикле, чтобы на не было не два символа 'V'
  2. Количество отступов между символами.

Привожу своё решение этой задачи. Здесь последний символ рисуется вне цикла отдельным вызовом print

h = int(input('Введите высоту фигуры: '))
for i in range(h-1):
    print(' ' * i + 'V' + ' ' * (2* h - 3 - 2 * i) + 'V')
print(' ' * (h-1) + 'V')
→ Ссылка
Автор решения: MarianD
SP = " "
V = "V"

h = int(input('Введите высоту фигуры: '))

pairs = [(i, 2 * (h - i) - 3) for i in range(h)]

first_parts = [i*SP + V + j*SP for i, j in pairs]
last_chars = (h-1)*[V] + [""]

for i in range(h):
    print(first_parts[i] + last_chars[i])

Объяснение:

  • pairs - это список пар (пробелов_перед_V, пробелов_после_V)

    Количество символов в левой половине от вертикальней оси симметрии это константа равна h-1, т.к. самое последнее V — прямо на оси симметрии — находится на позиции h.

    V···|       <---- i=0 ---->       V···        
    ·V··|       <---- i=1 ---->       ·V··        
    ··V.|       <---- i=2 ---->       ··V.        
    ···V|       <---- i=3 ---->       ···V        
    ····V       <---- i=4 ---->       ····
    12345              ↑              1234      
    <-h->              |            
     h=5       for i in range(h)    (h-1)=4
    

    Это константное количество (h-1) символов заключает в себе

    • пробелы перед буквой V  (i позиций),
    • самую букву V  (1 позиция),
    • пробелы после буквы V - значит, их будет (h-1) - (i+1).

    Всех пробелов между обеими буквами V будет в два раза больше, плюс один пробел прямо в оси симметрии, т. е.

    2·[(h-1) – (i+1)] + 1  =  2·(h – i – 2) + 1  =  2·(h – i) – 4 + 1  =  2·(h – i) – 3
    

    потому пары в генераторе списка именно такие ((i, 2 * (h - i) - 3)).

  • список last_chars например такой:

    ["V", "V", "V", "V", "V", ""]  
    

    т.е. последний элемент – пустая строка.

→ Ссылка
Автор решения: ilya484

Мой способ:

h = int(input('Введите высоту фигуры: '))
s=[]

for i in range(h):
    s.append(' '*i+"V"+' '*(h+2-i-2))

for l, r_ in zip(s, s[:-1:][::-1]):
    if len(r_)>2:
        print(l, r_)
print(' '*h+'V')

→ Ссылка
Автор решения: strawdog

Вот ещё вариант, для общего развития:

import numpy as np

h = 8
sym="V"

print('\n'.join(''.join(sym if x else " " for x in y ) for y in np.delete
                (np.concatenate([np.eye(h, dtype=int),
                                 np.rot90(np.eye(h, dtype=int))], axis=1), h,1)))
V             V
 V           V 
  V         V  
   V       V   
    V     V    
     V   V     
      V V      
       V       ​
→ Ссылка