Как сделать елочку в питоне
Перейти к содержимому

Как сделать елочку в питоне

  • автор:

Кривая Новогодняя елочка в Python

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно.
Необходимо обновить браузер или попробовать использовать другой.

Максим Владимиров1
Новичок

Пользователь

Ноя 28, 2022 11 0 1

n = int(input("dd: ")) k = int(input("dd2: ")) p = 1 def christmas_tree(n): p = 1 for x in range(k + 1): for i in range(p, n + 1): print(" "*(n+n-i), "*"*(2*i+1)) p = p+2 n = n+1 christmas_tree(n)

pythonProject5 – mon.py 28.11.2022 14_03_56.png

Это то что получается.

Последнее редактирование: Ноя 28, 2022

regnor
Модератор

Команда форума

Модератор

Июл 7, 2020 2 559 448 83

n = int(input("dd: ")) k = int(input("dd2: ")) # p = 1 def christmas_tree(n): p = 1 for x in range(k + 1): for i in range(p, n + 1): print(" " * (n + n - i), "*" * (2 * i + 1)) p += 1 # n = n+1 christmas_tree(n)
Максим Владимиров1
Новичок

Пользователь

Ноя 28, 2022 11 0 1

n = int(input("dd: ")) k = int(input("dd2: ")) # p = 1 def christmas_tree(n): p = 1 for x in range(k + 1): for i in range(p, n + 1): print(" " * (n + n - i), "*" * (2 * i + 1)) p += 1 # n = n+1 christmas_tree(n)

Спасибо за вариант, я его уже нашел! Но проблема в том что елочка должна сверху вниз быть шире и шире. У меня это сделано если обратить внимание! В этом варианте все хорошо, но надо сделать так чтоб она была все шире и шире книзу. Если поймете жду ответа, буду очень благодарен!

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Кривая елочка в Python

#1 Ноя. 28, 2022 14:24:52

MaksimVladimirov Зарегистрирован: 2022-11-28 Сообщения: 3 Репутация: 0 Профиль Отправить e-mail

Кривая елочка в Python

Здравствуйте! В колледже мне задали сделать новогоднею елочку с N этажами. Я сделал все что было в моих силах. Вопрос заключается в том как ее сделать ровной, у меня она как пизанская башня. Буду очень Вам благодарен! Жду ответа)

n = int(input("dd: ")) k = int(input("dd2: ")) p = 1 def christmas_tree(n): p = 1 for x in range(k + 1): for i in range(p, n + 1): print(" "*(n+n-i), "*"*(2*i+1)) p = p+2 n = n+1 christmas_tree(n) 

attachment

Прикреплённый файлы:
pythonProject5 – mon.py 28.11.2022 14_03_56.png (52,6 KБ)

#2 Ноя. 28, 2022 16:14:37

Rodegast От: Пятигорск Зарегистрирован: 2007-12-28 Сообщения: 2653 Репутация: 180 Профиль Отправить e-mail

Кривая елочка в Python

dd = 10 dd2 = 3 def vetka(i): l = (dd*2-i)//2 return ' '*l + '*'*i + ' '*l def konus(): return "\n".join( vetka(x) for x in range(dd*2) if x%2 ) print("\n".join( konus() for x in range(dd2))) 

С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

#3 Ноя. 28, 2022 16:25:21

MaksimVladimirov Зарегистрирован: 2022-11-28 Сообщения: 3 Репутация: 0 Профиль Отправить e-mail

Кривая елочка в Python

Cпасибо, но Ваш код без соединений, получилось так что просто про дублировались треугольники, а надо чтоб был треугольник в треугольнике и сверху в низ она расширялась. У меня все это сделано, фотографию прикреплял, но она кривая! Как сделать ее ровной?

#4 Ноя. 28, 2022 16:35:39

Rodegast От: Пятигорск Зарегистрирован: 2007-12-28 Сообщения: 2653 Репутация: 180 Профиль Отправить e-mail

Кривая елочка в Python

print("\n".join( konus()[x*dd*2:] for x in range(dd2))) 

С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Python 3, командная строка, рисуем елку

Задание

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

from random import randint as r STAR = '*' TOY = 'o' height = int(input('\nEnter the number of height [2-20]: ')) width = 2 * height - 1 for i in range(1, width + 1, 2): tree = i * STAR tree_1 = tree.center(width, '_') if i == 7 or i == 9 or i == 19 or i == 21 or i == 31: i -= 1 elif i == 11 or i == 23 or i == 33 or i == 35: i += 1 if (i - 3) % 3 == 0: start = (width - i) // 2 end = start + i my_list = list(tree_1) my_list[r(start, end)] = TOY tree_1 = ''.join(my_list) print(tree_1) 

Отслеживать
48.7k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 4 фев 2019 в 17:15
21 1 1 золотой знак 2 2 серебряных знака 5 5 бронзовых знаков
5 фев 2019 в 10:27

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Ваш код у меня вообще не отработал. Вот, Вам, мой пример генератора ёлки:

SPACE = '_' STRAR = '*' if __name__ == "__main__": rows = int(input()) spaces = rows-1 stars = 2 for i in range(rows): print( (SPACE*spaces) + (STRAR*stars) + (SPACE*spaces) ) stars += 2 spaces -= 1 
7 ______**______ _____****_____ ____******____ ___********___ __**********__ _************_ ************** 

А вот с игрушками:

from random import randint SPACE = '_' STRAR = '*' def toy(line): tmp = '' index = randint(0, len(line)-1) for i in range(len(line)): tmp += line[i] if i != index else 'o' return tmp if __name__ == "__main__": rows = int(input()) spaces = rows-1 stars = 2 for i in range(rows): print( (SPACE*spaces) + ((STRAR*stars) if (i % 2) != 0 else toy(STRAR*stars)) + (SPACE*spaces) ) stars += 2 spaces -= 1 
7 ______o*______ _____****_____ ____***o**____ ___********___ __*****o****__ _************_ ************o* 

Если нужен такой вывод:

10 _________o_________ ________***________ _______***o*_______ ______*******______ _____**o******_____ ____***********____ ___*****o*******___ __***************__ _**********o******_ ******************* 
10 _________*_________ ________o**________ _______*****_______ ______*o*****______ _____*********_____ ____o**********____ ___*************___ __*************o*__ _*****************_ 

То: [26] ((STRAR*stars) if (i % 2) == 0 else toy(STRAR*stars)) +

Вывод последовательности/массива «ёлочкой», «пирамидой» — пример решения (вложенные циклы)

vedro-compota's picture

Выведите его на экран «ёлочкой» последовательности чисел до $N$.
Например для $N=12$ вы должны получить:

1 2 3 4 5 6 7 8 9 10 11 12 .

Эту задачу можно решить используя два подхода:

  1. Просто перебрать (обойти) массив (а в данном случае просто последовательность) так как мы это делаем для вывода элементов в строчку, но в определённые моменты выводить между элементами знак переноса строки и таким образом получить ёлочку.
  2. Рассмотреть ёлочку как таблицу из нескольких строк (их может быть и очень много) в которой каждая следующая строка длиннее предыдущей на $1$, а первая по своей длине $=1$.

Решение с циклом одного уровня

В этом подходе мы просто перебираем все числа до $n$ в цикле for, в каждом витке выводя очередное значение + иногда перенося строку:

var n, i, j, k:integer; begin writeln('vvedite chislo N:'); readln(n); // получаем число, до которого будем выводить ёлочку k:=1; // число символов которые можно вывести не перенося строку j:=0; // сколько мы вывели с последего переноса строки for i:=1 to N do begin write(i, ' '); // просто выводим в ждом витке j := j + 1; // учтём, что мы вывели ещё один символ (для будущего переноса) if (j>=k) then // не пора ли переносить строку? begin writeln(); // перенос строки j:=0; // в новой строке ёлочки мы ещё ничего не вывели (сбрасываем счетчик) k:=k+1; // следубщий раз выведем на 1 символ больше до переноса строки end; end; readln(); end.

Решение через вложенные циклы

Здесь мы рассмотрим код, иллюстрирующий второй подход:

Рассмотреть ёлочку как таблицу из нескольких строк (их может быть и очень много) в которой каждая следующая строка длиннее предыдущей на $1$, на первая по своей длине $=1$.

Ясно, что в таблице может быть сколько угодно строк (внешний цикл) + нам потребуется выводить каждую строку посимвольно (внутренний цикл).

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

Очередной внутренний цикл вывода строки начинает свою работу с того значения $i$, на котором он остановился предыдущий раз. Поэтому мы инкрементируем $i$ в единственном месте — а именно сразу после вывода на экран очередного значения.

var n, i, j, k:integer; begin writeln('vvedite chislo N:'); readln(n); // получаем число, до которого будем выводить ёлочку i:=1; k:=1; while (i<=n) do // просто контролируем диапазон begin for j:=1 to k do // вывод очередной строки begin if (i<=n) then // если мы всё ещё в диапазоне begin write(i, ' '); // выводим очередное значение (с пробелом) i:=i+1; // готовим следующее end else break; // досрочный выход из цикла end; writeln(); // переносим строку k:=k+1; // следующая строка будет длиннее на 1 символ end; readln(); end.

Массив как источник данных

Безусловно, мы можем использовать в качестве источника данных для ёлочки и одномерный массив (в программе для инициализации его случайными числами используется процедура -- решим задачу первым способом без вложенных циклов с одним источником данных):

var n, i, j, k:integer; a: array [1..17] of integer; // процедура заполнит массив случайными числами procedure initRandArray(var a: array of integer); var min, max, i: integer; begin randomize(); // инициал. датчик случайных чисел (вызов стандартной процедуры) min := -5; // левая граница max := 10; // правая граница < обходим переданный массив и инициализируем массив случайными числами>for i:=low(a) to high(a) do a[i] := random(max + abs(min)) + min; end; begin // начало тела программы N := 17; // число элементов массива initRandArray(a); // передаём по ссылке для заполнения случаными числами k:=1; // число символов которые можно вывести не перенося строку j:=0; // сколько мы вывели с последего переноса строки for i:=1 to N do begin write(a[i], ' '); // выводим очередной элемент массива j := j + 1; // учтём, что мы вывели ещё один символ (для будущего переноса строки) if (j>=k) then // не пора ли переносить строку? begin writeln(); // перенос строки j:=0; // в новой строке ёлочки мы ещё ничего не вывели (сбрасываем счетчик) k:=k+1; // следубщий раз выведем на 1 символ больше до переноса строки end; end; readln(); end.

Key Words for FKN + antitotal forum (CS VSU):

  • ёлочка
  • вывод поледовательности ёлочкой пирамидой
  • вложенные циклы
  • примеры решений задач на вложенные циклы
  • вложенные циклы ёлочка Паскаль

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *