Как воссоздать треугольник пирамиды?

1

Я должен написать рекурсивную функцию 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
        ^
Теги:
recursion

3 ответа

3
Лучший ответ

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

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

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)
    *
   ***
  *****
 *******
  • 1
    Имейте в виду, что он сказал, что хочет рекурсивную функцию. Не уверен, понимает ли он разницу между нормальной и рекурсивной функцией.
  • 0
    @ Фудзи Хорошая мысль. Я не заметил этого в вопросе.
2

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

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 числа звезд.

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

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

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

  • 2
    Ваш ответ имеет несколько проблем с форматированием или содержанием. Во-первых, это не с отступом хорошо. Во-вторых, вывод должен быть представлен как текст, а не как изображение (изображение должно быть ограничено конкретным случаем, поскольку на него нет ссылок). В-третьих, вы не предоставляете код, в котором вы можете выбрать depth в качестве пирамиды, как указано в вопросе. Возможно, вам придется взять тур /, чтобы прочитать, как ответить

Ещё вопросы

Сообщество Overcoder
Наверх
Меню