Треугольник звездочки в Python

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

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

*
**
***
****

Я придумал эту функцию:

def asterisk_triangle(n):
    """
    takes an integer n and then returns an
    asterisk triangle consisting of (n) many lines
    """
    x = 1
    while (x <= n):
        print("*" * x)
        x = x + 1
    return

А также мне пришлось создать перевернутый треугольник звездочки, манипулируя первой функцией.

Я придумал эту функцию и результат:

def upside_down_asterisk_triangle(n):
     """
     takes an integer n and then returns a backwards
     asterisk triangle consisting of (n) many lines
     """
     x = 0
     while (x < n):
          print("*" * (n-x))
     x = x + 1
     return


****
***
**
*

Теперь мне нужно манипулировать этими функциями, чтобы создать обратный треугольник звездочки.

   *
  **
 ***
****

И обратный перевернутый треугольник звездочки.

****
 ***
  **
   *

Какие функции мне нужно реализовать?

Я пробовал использовать команду обратной строки [:: - 1] после функции, но это не сработало.


person Kuma    schedule 22.03.2013    source источник
comment
Разве нельзя просто запустить тот же цикл только в обратном направлении?   -  person erdekhayser    schedule 22.03.2013
comment
Просто Gunna поместил это там, но эти функции в настоящее время не рекурсивны. Не уверен, что это было основной частью требования, но, возможно, так оно и было.   -  person Slater Victoroff    schedule 22.03.2013


Ответы (1)


Я уже ранее отвечал на тот же вопрос. Имейте в виду, что ни одна из упомянутых вами функций не является recursive функциями. Подробнее о рекурсии можно узнать здесь.

Это пример, который я упоминал здесь.

Python 3.X

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)

И здесь у вас есть перевернутая версия рекурсивной функции.

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

upside_down_asterix_triangle(5)

Python 2.X

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)

И здесь у вас есть перевернутая версия рекурсивной функции.

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

upside_down_asterix_triangle(5)

Изменить: снимок экрана, показывающий скрипт, запущенный в моей среде IDE.

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

Edit2: добавлен код, работающий под Python 3.x

Edit3: добавлена ​​итеративная функция для Python 3.X

def create_pyramid(rows):
    for i in range(rows):
        print((' ' * ( rows- i - 1 ) + '*' * ( 2 * i + 1)))

print((create_pyramid(5)))

def create_upside_down_pyramid(rows):
    for i in reversed(list(range(rows))):
        print((' ' * ( rows- i - 1 ) + '*' * ( 2 * i + 1)))

print((create_upside_down_pyramid(5)))
person eandersson    schedule 22.03.2013
comment
каждый раз, когда я набираю код, который вы мне дали, и запускаю его, он дает синтаксическую ошибку во второй кавычке после печати - person Kuma; 22.03.2013
comment
@AkumaUkpo Я обновил сообщение альтернативной нерекурсивной функцией, а также скриншотом макета кода на моем компьютере. - person eandersson; 22.03.2013
comment
ссылка ссылка Я сделал скриншоты кода и сообщения об ошибке. Что я делаю неправильно? @Fuji - person Kuma; 22.03.2013
comment
Я добавил еще одну версию перевернутой пирамиды. Сложно сказать, может быть, вы используете Python 3.X? Я бы порекомендовал вам удалить любой предыдущий код, чтобы убедиться, что это не другой тип. - person eandersson; 22.03.2013
comment
о, извините, я забыл упомянуть, да, я использую python 3.3.0 @Fuji - person Kuma; 22.03.2013
comment
@AkumaUkpo Я обновил пример, который работает под Python 3.X. ideone.com/w7uues - person eandersson; 22.03.2013
comment
Большое спасибо, чувак. У меня сейчас нет ошибок, когда я запускаю его. Однако я все еще пытаюсь получить итеративную функцию для backward_asterisk_triangle и рекурсивную функцию для backward_upside_down_asterisk_triangle @Fuji - person Kuma; 22.03.2013
comment
Я добавил один для вас в конце. - person eandersson; 22.03.2013
comment
ошибка второго кода ideone.com/iI13u3 - person Kuma; 22.03.2013
comment
должно быть reversed, а не reverse. Фиксированный. - person eandersson; 22.03.2013
comment
Я хочу воспользоваться моментом, чтобы поблагодарить вас за вашу помощь. Однако треугольники, получаемые вашими функциями, не соответствуют тому, как должны выглядеть треугольники в назначении. они не должны быть центрированы. Думаю, это можно исправить, удалив что-нибудь из кода. Взгляните на ссылку - person Kuma; 22.03.2013
comment
Просто измените 2 * i + 1 на i + 1 или t * 2 + 1 на t + 1 - person eandersson; 22.03.2013
comment
хорошо, я применил изменения к backward_asterisk_triangle и backward_upside_down_asterisk _triangle, и они сработали. (проверьте последнюю ссылку, которую я отправил). однако asterisk_triangle не перевернут (он наклоняется влево, а не вправо), а upside_down_asterisk_triangle такой же (не наклоняется вправо, как предполагалось). Как мне изменить коды, чтобы отобразить это? - person Kuma; 22.03.2013
comment
@AkumaUkpo ideone.com/5cHU5q - person eandersson; 22.03.2013
comment
это те функции, которые пока работают точно - ссылка пустые функции не работают правильно (см. ссылку, которую я отправил вам перед вашим последним комментарием - задание pdf в формате img) @Fuji - person Kuma; 22.03.2013
comment
в ссылке, которую вы мне только что отправили, я хочу, чтобы первые два треугольника выглядели зеркально (это основная проблема, с которой я столкнулся) @Fuji, в противном случае все хорошо - person Kuma; 22.03.2013
comment
Попробуй это. ;) ideone.com/FJQRRT - person eandersson; 22.03.2013
comment
Омг, я не могу отблагодарить тебя достаточно, чувак. Вы предлагали самую большую помощь в течение нескольких часов. Наконец-то это сработало. Спасибо. - person Kuma; 22.03.2013