Tworzenie choinki w Pythonie – świąteczne programowanie

Święta to doskonały czas, by połączyć naukę programowania z atmosferą Bożego Narodzenia! W dzisiejszym wpisie pokażę Ci, jak stworzyć choinkę w Pythonie. To świetny projekt dla początkujących, jak i bardziej zaawansowanych programistów, którzy chcą dodać trochę świątecznego klimatu do swoich umiejętności.

Piękna kolorowa choinka w Pythonie wraz z ozdobami świątecznymi.

Prosta choinka w Pythonie – zacznijmy od podstaw

Na początek stworzymy bardzo prostą choinkę w Pythonie, wykorzystując pętlę for. Poniższy kod wygeneruje choinkę z samych gwiazdek:

height = 10
for i in range(height):
    print('*' * (i + 1))

Efekt? Choinka w Pythonie, która wygląda jak schodki!

Choinka wygląda jak schodki.

Ciekawostka: Mnożenie stringa przez liczbę w Pythonie

Zwróć uwagę na linię:

'*' * (i + 1)

W Pythonie możemy pomnożyć tekst (string) przez liczbę, co daje efekt powtórzenia danego ciągu znaków. Na przykład:

print('A' * 5)  # Wynik: AAAAA
print('-' * 10) # Wynik: ----------

To przydatna funkcja, gdy chcemy szybko stworzyć linie tekstu o określonej długości lub – jak w tym przypadku – rysować choinkę w Pythonie.

Ulepszamy choinkę – kształt trójkąta

Choinka powinna mieć kształt trójkąta. W tym celu zmodyfikujemy kod tak, aby dodawać odpowiednią ilość spacji przed każdą linią:

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

Co dokładnie robi ten kod? Każda linia choinki składa się z dwóch elementów:

  • Spacjeheight - i - 1 oblicza liczbę spacji przed gwiazdkami, aby wyrównać choinkę do środka. Im wyższa linia (większe i), tym mniej spacji przed gwiazdkami.
  • Gwiazdki* jest powtarzane 2 * i + 1 razy, co sprawia, że każda kolejna warstwa choinki rozszerza się o dwa znaki.
Choinka w Pythonie - wygląda już jak choinka, ale brakuje pnia.

Na przykład dla i = 0 (pierwsza linia):

' ' * (10 - 0 - 1) + '*' * (2 * 0 + 1)  # Wynik: '         *'

Dla i = 5 (środkowa część choinki):

' ' * (10 - 5 - 1) + '*' * (2 * 5 + 1)  # Wynik: '     ***********'

Taka logika pozwala uzyskać trójkątny kształt choinki.

Pień choinki – jak go dodać i dlaczego to ważne?

Choinka bez pnia wygląda jak zawieszona w powietrzu, dlatego dodanie pnia sprawia, że cała konstrukcja staje się bardziej kompletna i realistyczna. Pień można dodać w prosty sposób, rysując kilka linii pod koroną drzewa.

Kod na pień wygląda następująco:

trunk_height = 2
trunk_width = 3

for i in range(trunk_height):
    print(' ' * (height - trunk_width // 2 - 1) + '*' * trunk_width)
Choinka w Pythonie - prezentuje się razem z pniem.

Jak to działa?

  • trunk_height określa, jak wysoki będzie pień (ile linii go tworzy).
  • trunk_width definiuje szerokość pnia. Najczęściej pień jest węższy niż korona drzewa, dlatego warto użyć stałej szerokości (np. 3 znaki *).
  • Pętla for rysuje pień linia po linii. Każda linia ma tyle spacji przed gwiazdkami, aby pień był wyśrodkowany względem choinki.
  • Wyrażenie (height - trunk_width // 2 - 1) oblicza liczbę spacji, zapewniając, że pień zawsze jest symetrycznie pod choinką, niezależnie od jej wysokości.

Ten fragment kodu dodaje szlif, który sprawia, że choinka wygląda bardziej realistycznie i estetycznie.

Dodajmy ozdoby do choinki w Pythonie

Dodanie ozdób do choinki sprawi, że będzie wyglądała bardziej świątecznie i efektownie. Aby to osiągnąć, możemy wprowadzić losowo generowane ozdoby przy użyciu prawdopodobieństwa.

Poniżej znajdziesz kod, który dodaje ozdoby do choinki:

import random

height = 10
baubles = ['o', '@', '$', '*']  # Ozdoby
probability = 0.15  # Szansa na ozdobę (15%)

for i in range(height):
    row = ''
    for j in range(2 * i + 1):
        if random.random() < probability:
            row += random.choice(baubles)
        else:
            row += '*'
    print(' ' * (height - i - 1) + row)

trunk_height = 2
trunk_width = 3

for i in range(trunk_height):
    print(' ' * (height - trunk_width // 2 - 1) + '*' * trunk_width)

Jak to działa?

  • Wprowadziliśmy listę baubles, która zawiera znaki ozdób.
  • Zmienna probability określa szansę na pojawienie się ozdoby na danej pozycji (np. 15%).
  • Wewnątrz pętli for, jeśli losowa liczba jest mniejsza od probability, na danym miejscu pojawi się losowa ozdoba, w przeciwnym wypadku rysowana jest zwykła gwiazdka *.
Dodaliśmy ozdoby świąteczne do choinki.

Kolory tekstu w terminalu

Kolory w terminalu to świetny sposób na uatrakcyjnienie wyników programu i dodanie efektownego wyglądu do konsolowych projektów. Python umożliwia stosowanie kodów ANSI, które pozwalają na zmianę koloru tekstu i tła bez potrzeby używania dodatkowych bibliotek.

Jak działają kody ANSI?

Kody ANSI to specjalne sekwencje znaków, które terminal interpretuje jako polecenia do zmiany koloru tekstu, tła lub dodania efektów (np. pogrubienie, podkreślenie). Każdy kod zaczyna się od \033[ (lub \x1b[), a po nim następuje numer określający efekt.

Przykłady kodów ANSI:

  • \033[31m – zmienia tekst na czerwony
  • \033[32m – zielony tekst
  • \033[0m – resetuje wszystkie zmiany (powrót do domyślnego koloru)

Kody kolorów ANSI w Pythonie:

# ANSI kolory
BLACK = '\033[30m'
RED = '\033[31m'
GREEN = '\033[32m'
YELLOW = '\033[33m'
BLUE = '\033[34m'
MAGENTA = '\033[35m'
CYAN = '\033[36m'
WHITE = '\033[37m'
# jasna wersja
BRIGHT_BLACK = '\033[90m'
BRIGHT_RED = '\033[91m'
BRIGHT_GREEN = '\033[92m'
BRIGHT_YELLOW = '\033[93m'
BRIGHT_BLUE = '\033[94m'
BRIGHT_MAGENTA = '\033[95m'
BRIGHT_CYAN = '\033[96m'
BRIGHT_WHITE = '\033[97m'
# specjalne
RESET = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'

Jak używać kodów w praktyce?

print(RED + "To jest czerwona choinka!" + RESET)
print(GREEN + "To jest zielona choinka!" + RESET)
print(BOLD + "Choinka z grubymi ozdobami!" + RESET)

Ważne jest, by na końcu używać RESET, by uniknąć problemów z kolorami na reszcie terminala.

Kolorujemy choinkę w Pythonie – świąteczna magia kolorów

Nic tak nie przyciąga uwagi jak choinka, która rozświetla ekran feerią barw! Dodanie kolorów do naszej choinki w Pythonie sprawi, że będzie wyglądała jeszcze bardziej świątecznie i efektownie. Poniżej znajdziesz kod, który nie tylko rysuje choinkę, ale również ozdabia ją różnokolorowymi bombkami i zielonymi gałęziami.

Kod kolorowej choinki w Pythonie

import random

# ANSI kolory
GREEN = '\033[32m'
RED = '\033[31m'
YELLOW = '\033[33m'
BLUE = '\033[34m'
MAGENTA = '\033[35m'
CYAN = '\033[36m'
BROWN = '\033[33m'  # Brązowy pień (ten sam kod co żółty)
RESET = '\033[0m'

height = 10
baubles = ['o', '@', '$', '*']  # Ozdoby
colors = [RED, YELLOW, BLUE, MAGENTA, CYAN]  # Dostępne kolory bombek
probability = 0.15  # Szansa na bombkę (15%)

# Rysowanie korony choinki
for i in range(height):
    row = ''
    for j in range(2 * i + 1):
        if random.random() < probability:
            color = random.choice(colors)  # Losowy kolor dla bombki
            row += f"{color}{random.choice(baubles)}{RESET}"
        else:
            row += f"{GREEN}*{RESET}"  # Zielone gałęzie
    print(' ' * (height - i - 1) + row)

# Rysowanie pnia
trunk_height = 2
trunk_width = 3
for i in range(trunk_height):
    print(' ' * (height - trunk_width // 2 - 1) + f"{BROWN}{'*' * trunk_width}{RESET}")
Choinka w Pythonie - dodanie kolorów.

Jak działa kod?

Każda gałąź choinki (*) jest domyślnie wyświetlana w kolorze zielonym (GREEN). Dzięki temu mamy bazę, na której będą rozmieszczone ozdoby.

Za pomocą funkcji random.random() na każdej pozycji choinki istnieje 15% szansy na pojawienie się bombki zamiast gwiazdki. Bombki są wybierane losowo z listy baubles i kolorowane jednym z pięciu dostępnych kolorów (RED, YELLOW, BLUE, MAGENTA, CYAN).

Pień choinki rysowany jest na brązowo (BROWN). Ponieważ kod ANSI dla koloru brązowego (BROWN) jest taki sam jak żółty (\033[33m), efekt przypomina naturalny kolor drewna.

Refaktoryzacja – ostateczna wersja kolorowej choinki w Pythonie

Przed Tobą finalna, dopracowana wersja choinki w Pythonie, która nie tylko cieszy oko, ale również jest w pełni zautomatyzowana pod kątem wielkości pnia i wysokości korony. Dzięki refaktoryzacji, kod stał się bardziej przejrzysty i elastyczny – wystarczy zmienić jedną wartość (HEIGHT), by dostosować cały projekt do swoich potrzeb.

Co zostało usprawnione?

  • Automatyczna wysokość pnia – Pień choinki to teraz 1/5 jej wysokości, co sprawia, że choinka zawsze zachowuje odpowiednie proporcje.
  • Dynamiczna szerokość pnia – Szerokość pnia jest automatycznie wyliczana na podstawie wysokości choinki. Kod inteligentnie zaokrągla wartość, by pień był zawsze nieparzysty, co gwarantuje jego idealne wyśrodkowanie.
  • Kolorowe bombki – Losowo generowane bombki w pięciu różnych kolorach (RED, YELLOW, BLUE, MAGENTA, CYAN) ożywiają całą choinkę, dodając jej świątecznego blasku.
  • Zielone gałęzie i brązowy pień – Choinka zyskała realistyczne barwy dzięki kodom ANSI, co sprawia, że jej wygląd przypomina prawdziwe drzewko świąteczne.
import random

# Wysokość choinki
HEIGHT = 10

# ANSI kolory
GREEN = '\033[32m'
RED = '\033[31m'
YELLOW = '\033[33m'
BLUE = '\033[34m'
MAGENTA = '\033[35m'
CYAN = '\033[36m'
BROWN = '\033[33m'
RESET = '\033[0m'

# Ozdoby i kolory
baubles = ['o', '@', '$', '*']  # Ozdoby
colors = [RED, YELLOW, BLUE, MAGENTA, CYAN]  # Dostępne kolory bombek
probability = 0.15  # Szansa na bombkę (15%)

# Automatyczne generowanie wielkości pnia
trunk_height = HEIGHT // 5
trunk_width = (HEIGHT // 3) if (HEIGHT // 3) % 2 == 1 else (HEIGHT // 3) + 1

# Rysowanie korony choinki
for i in range(HEIGHT):
    row = ''
    for j in range(2 * i + 1):
        if random.random() < probability:
            color = random.choice(colors)
            row += f"{color}{random.choice(baubles)}{RESET}"
        else:
            row += f"{GREEN}*{RESET}"
    print(' ' * (HEIGHT - i - 1) + row)

# Rysowanie pnia choinki
for i in range(trunk_height):
    print(' ' * (HEIGHT - trunk_width // 2 - 1) + f"{BROWN}{'*' * trunk_width}{RESET}")

Jak działa kod?

Każdy element choinki jest generowany dynamicznie – od zielonych gałęzi po kolorowe bombki i pień o odpowiedniej szerokości. Pętla for dba o to, by każda linia choinki była wyśrodkowana, co pozwala uzyskać klasyczny, symetryczny kształt.

  • Jeśli wysokość choinki wzrośnie, pień również stanie się wyższy i szerszy, co nadaje drzewku naturalny wygląd.
  • Gałęzie choinki zawsze są zielone (GREEN), natomiast bombki losowo przyjmują różne kolory, co tworzy efekt migoczących ozdób na choince.
  • Efekt końcowy to choinka, która za każdym razem wygląda inaczej, ale zawsze prezentuje się estetycznie.

Dlaczego ten kod jest tak dobry?

  • Elastyczność i prostota – Jedna zmienna (HEIGHT) pozwala na dostosowanie całego projektu. To oznacza, że możesz stworzyć choinkę o dowolnej wielkości bez konieczności zmieniania wielu fragmentów kodu.
  • Realizm i detale – Kod ANSI dodaje świąteczny klimat, a brązowy pień i kolorowe bombki sprawiają, że choinka wygląda bardziej naturalnie.
  • Dla początkujących i zaawansowanych – Projekt jest prosty do zrozumienia, ale wprowadza elementy losowości, pętli zagnieżdżonych i formatowania ciągów tekstowych, co czyni go świetnym materiałem do nauki.

Minimalistyczna choinka – najkrótsza wersja kodu

Jeśli zależy Ci na maksymalnym skróceniu kodu, poniższy przykład pokazuje, jak osiągnąć ten sam efekt w zaledwie kilku linijkach. To doskonały przykład na to, jak w Pythonie można osiągnąć dużo przy minimalnej ilości kodu:

import random

H = 10
C = ['\033[32m', '\033[31m', '\033[33m', '\033[34m', '\033[35m', '\033[36m', '\033[33m', '\033[0m']
B = ['o', '@', '$', '*']
p, T, W = 0.15, H // 5, (H // 3) + 1 if (H // 3) % 2 == 0 else (H // 3)

[print(' ' * (H - i - 1) + ''.join(f"{random.choice(C[1:6])}{random.choice(B)}{C[7]}" if random.random() < p else f"{C[0]}*{C[7]}" for _ in range(2 * i + 1))) for i in range(H)]

[print(' ' * (H - W // 2 - 1) + f"{C[6]}{'*' * W}{C[7]}") for _ in range(T)]

Dlaczego ten kod jest wyjątkowy?

  • Cała logika rysowania choinki i pnia została zamknięta w dwóch listach składanych (list comprehension).
  • Pomimo kompaktowej formy kod nadal losowo dodaje ozdoby i korzysta z kolorów ANSI, co zapewnia pełen świąteczny efekt.
  • Kod jest idealnym przykładem eleganckiej i zwięzłej składni Pythona, a zmieniając tylko wartość H, możesz szybko dostosować rozmiar choinki.

Taki minimalizm to świetna lekcja na temat efektywnego programowania i czytelności kodu, nawet w tak krótkiej formie!

Podsumowanie

Tworzenie choinki w Pythonie to doskonały sposób na naukę programowania w świątecznym klimacie. Finalna wersja kodu jest intuicyjna i pozwala na dużą personalizację – od wysokości drzewka po ozdoby i ich kolory. Jeśli chcesz uatrakcyjnić swój projekt, dodaj światełka lub animacje, a Twoja choinka stanie się prawdziwą atrakcją terminala.

Niech świąteczne kodowanie przyniesie Ci wiele radości!

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *


The reCAPTCHA verification period has expired. Please reload the page.

Scroll to Top