нужно воссоздать пирамидный треугольник на Python

Я должен написать recursive функцию asterisk_triangle которая принимает целое число, а затем возвращает треугольник звездочки, состоящий из множества строк.

В качестве примера это четырехстрочный треугольник звездочки.

  * ** *** **** 

Я пробовал эту функцию:

 def asterix_triangle(depth): rows = [ (depth-i)*' ' + i*2*'*' + '*' for i in range(depth-1) ] for i in rows: print i 

И следующая функция:

 def asterisk_triangle(rows=n): pyramid_width = n * 2 for asterisks in range(1, pyramid_width, 2): print("{0:^{1}}".format("*" * asterisks, pyramid_width)) 

И никто не работал. Я должен сделать tests.py для проверки функций, и я получаю ошибки, например

 Traceback (most recent call last): File "C:\Users\akumaukpo\Documents\CISC 106\LAB05\lab05 _test.py", line 19, in <module> from lab05 import * File "C:\Users\akumaukpo\Documents\CISC 106\LAB05\lab05.py", line 22 print i ^ 

Каждый оператор в блоке должен иметь отступ по крайней мере от одного места от начала блока. Оператор печати в вашем коде не имеет отступов относительно блока, в котором он содержится, поэтому у вас есть ошибка.

Попробуй это:

 def asterix_triangle(depth): rows = [ (depth-i)*' ' + i*'*' + '*' for i in range(depth) ] for i in rows: print i 

Который дает:

 >>> asterix_triangle(4) * ** *** **** 

РЕДАКТИРОВАТЬ:

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

 def asterix_triangle(depth): rows = [ (depth-i)*' ' + i*'*' + '*' + i*'*' for i in range(depth) ] for j in rows: print j 

Выход:

 >>> asterix_triangle(4) * *** ***** ******* 

Если вам нужно сделать пирамиду рекурсивно, вам, вероятно, нужно будет сделать что-то вроде этого.

 def asterix_triangle(i, t=0): if i == 0: return 0 else: print ' ' * ( i + 1 ) + '*' * ( t * 2 + 1) return asterix_triangle(i-1, t + 1) asterix_triangle(5) 

Идея состоит в том, что вы используете две переменные. Один из них – это i , который вычитается один раз при каждом вызове функции и используется для завершения цикла. Другая переменная используется для постепенного увеличения. Затем вы используете i для печати количества пробелов и t числа звезд.

Результатом будет:

  * *** ***** ******* ********* 
 for i in range(10): print((' '*(10-i-1))+(('*')*((2*i)-1))) 

Вывод показан в ссылке