равнобедренный треугольник Python
нужно нарисовать равнобедренный треугольник при нечетных n. Не получается реализовать вложенный цикл на убывание рисования. Как сделать второй вложенный цикл, чтоб чертил звездочки на убывание?(Нужно использовать вложенные циклы)
n = 5
for i in range(1,n+1):
if i <= n//2+1:
for j in range(i):
print('*',end='')
elif i >n//2+1:
for j in range(n//2,0,-1):
print('*',end='')
print()
Ответы (3 шт):
Ваш код вызывает в памяти поговорку "зачем делать просто, когда можно сделать сложно" :)
Такой вариант не устраивает?
n = 5
for i in range(n//2+1):
print('*' * (i+1))
for i in range(n//2, 0, -1):
print('*' * i)
вот решение при нечетных n. Нужно использовать не убывание а уменьшение на возрастании в третьем цикле в зависимости от i. Подсказка от "Интик"
n = int(input())
for i in range(1,n+1):
if i <= n//2+1:
for j in range(i):
print('*',end='')
elif i >n//2+1:
for j in range(0,n-i+1):
print('*',end='')
print()
Также есть решение еще круче, с одним вложенным циклом:
n=5
for i in range(n):
k = (n // 2 + 1) - abs(n // 2 - i)
for _ in range(k):
print('*', end='')
print()
результат:
*
**
***
**
*
вариант 1 (вложенный цикл):
n = 7
for i in range(n):
for j in range(n // 2 - abs(n // 2 - i) + 1):
print('*', end='')
print()
вариант 2 (почти вложенный цикл, т.е. внутри цикла есть цикл, но это не совсем вложенный):
n = 7
for i in range(n):
print(*['*' for j in range(n // 2 - abs(n // 2 - i) + 1)], sep='')
вариант 2.1 (через формирование строки):
n = 7
for i in range(n):
print(''.join('*' for j in range(n // 2 - abs(n // 2 - i) + 1)), sep='')
вариант 2.2 (циклы вложенные есть... технически):
n = 7
print('\n'.join(''.join('*' for j in range(n // 2 - abs(n // 2 - i) + 1)) for i in range(n)))