furas.pl
# prywatne notatki - Python, Linux, Machine Learning, etc.

Rysowanie w Turtle - Kwadrat i Prostokąt

Kwadrat

(ang: square)

Aby narysować kwadrat należy cztery razy powtórzyć: narysuj bok, skręć w prawo (lub lewo) o 90 stopni.

Podczas rysowania żółw w sumie wykonuje obrót o 360 stopni a ponieważ robi 4 skręty więc każdy z nich ma 360/4 = 90 stopni.

import turtle

turtle.forward(300)
turtle.left(90)

turtle.forward(300)
turtle.left(90)

turtle.forward(300)
turtle.left(90)

turtle.forward(300)
turtle.left(90)

turtle.mainloop()
turtle przykład figury

W powyższym kodzie ostatni skręt w lewo właściwie nie jest potrzebny ale dzięki niemu na koniec rysowania żółw jest zwrócony w tą samą stronę jak był przed rysowaniem. Ułatwia to planowanie kolejnej figury.

Z powyższego widać też, że można to łatwo zapisać z użyciem for.

import turtle

for _ in range(4):
    turtle.forward(200)
    turtle.left(90)

turtle.mainloop()

Można z tego kodu zrobić funkcję aby narysować wiele kwadratów - np. różnej wielkości.

import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.left(90)

kwadrat(100)
kwadrat(200)
kwadrat(300)

turtle.mainloop()
turtle przykład figury

Można to zrobić także z użyciem petli for

import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.left(90)

for x in range(1, 4):
    kwadrat(x*100)

turtle.mainloop()

lub wykorzystując możliwości range(początek, koniec, krok) pamiętając, że koniec nie wchodzi w zakres zwracanych wartości więc jeśli chcemy otrzymać 300 to koniec musi być 301 (lub większy)

import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.left(90)

for bok in range(100, 301, 100):
    kwadrat(bok)

turtle.mainloop()

Można oczywiście zastosować też listę (lub tuplę/krotkę) zamiast range() i wtedy wartości mogą być bardziej "losowe"

import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.left(90)

for bok in [100, 200, 300]:
    kwadrat(bok)

turtle.mainloop()

Jak widać użycie for pozwala więc łatwo zmieniać ilość.

---

Zamiast zmieniać wielkość kwadrata można też obracać żółwia przed narysowanie każdej z figur.

import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.left(90)

kwadrat(100)
turtle.left(120)
kwadrat(100)
turtle.left(120)
kwadrat(100)
turtle.left(120)

turtle.mainloop()
turtle przykład figury

Tu ponownie widać, że kod się powtarza więc można zastosować pętlę for

import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.left(90)

for _ in range(3):
    kwadrat(100)
    turtle.left(120)

turtle.mainloop()

Można też zmienić ilość powtórzeń i automatycznie wyliczać kąt

import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.left(90)

bok = 100
ilosc = 4
kat = 360/ilosc

for _ in range(ilosc):
    kwadrat(bok)
    turtle.left(kat)

turtle.mainloop()
turtle przykład figury turtle przykład figury turtle przykład figury turtle przykład figury turtle przykład figury turtle przykład figury

Zamiast zmieniać kąt można też przesuwać żółwia przed narysowaniem kolejnego kwadrata.

import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.left(90)

bok = 100
ilosc = 4

for _ in range(ilosc):
    kwadrat(bok)
    turtle.forward(bok)

turtle.mainloop()
turtle przykład figury

Można też rysować kilka linii kwadratów - jedna nad drugą - aby stworzyć siatkę.

import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.left(90)

bok = 100
ilosc = 3
nawrot = 180

for _ in range(3):

    # rysowanie linii kwadratów

    for _ in range(ilosc):
        kwadrat(bok)
        turtle.forward(bok)

    # powrót na początek linii

    turtle.backward(ilosc*bok)

    # przejście do kolejnej linii

    turtle.left(90)
    turtle.forward(bok)
    turtle.right(90)

turtle.mainloop()
turtle przykład figury

Każda linia może mieć inną ilość kwadratów i tworzyć piramidę. W tym przykładzie w kwadratach skręcam w prawo zamiast w lewo.

import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.right(90)

bok = 100

for ilosc in range(1, 4):

    # każdy wiersz przesunięty o pół kwadratu względem poprzedniego wiersza

    turtle.backward(bok//2)

    # rysowanie linii kwadratów

    for _ in range(ilosc):
        kwadrat(bok)
        turtle.forward(bok)

    # cofniecie na początek linii

    turtle.backward(bok*ilosc)

    # przejście do niższej linii

    turtle.right(90)
    turtle.forward(bok)
    turtle.left(90)

turtle.mainloop()
turtle przykład figury

---

Można też połączyć rysowanie w linii i skręcanie

import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.left(90)

bok = 100
ilosc = 3

for _ in range(4):

    for _ in range(ilosc):
        kwadrat(bok)
        turtle.forward(bok)

    turtle.right(90)

turtle.mainloop()
turtle przykład figury
import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.left(90)

bok = 100
ilosc = 3

for _ in range(3):

    for _ in range(ilosc):
        kwadrat(bok)
        turtle.forward(bok)

    turtle.right(120)

turtle.mainloop()
turtle przykład figury
import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.left(90)

bok = 100
ilosc = 4
kat = 360/ilosc

for _ in range(ilosc):
    kwadrat(bok)
    turtle.forward(bok)
    turtle.right(kat)

turtle.mainloop()

ilosc = 4

turtle przykład figury

ilosc = 5

turtle przykład figury

Można też skręcać w lewo

import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.left(90)

bok = 100
ilosc = 5
kat = 360/ilosc

for _ in range(ilosc):
    kwadrat(bok)
    turtle.forward(bok)
    turtle.left(kat)

turtle.mainloop()

ilosc = 5

turtle przykład figury

ilosc = 10

turtle przykład figury

Pod dodaniu kreski do kwadrata mamy flagę

import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.left(90)

def flaga(bok, ):
    turtle.forward(100)   # narysuj patyk
    kwadrat(bok)          # narysuj kwadrat flagi
    turtle.backward(100)  # wycofaj się na początkowe miejsce

ilosc = 12
kat = 360/ilosc

for _ in range(ilosc):
    flaga(50)
    turtle.left(kat)

turtle.mainloop()
turtle przykład figury

Można też zmieniać wielkość flagi

import turtle

def kwadrat(bok):
    for _ in range(4):
        turtle.forward(bok)
        turtle.left(90)

def flaga(bok, ):
    turtle.forward(100)   # narysuj tyczkę
    kwadrat(bok)          # narysuj kwadrat flagi
    turtle.backward(100)  # wycofaj się na początkowe miejsce

ilosc = 12
kat = 360/ilosc

for x in range(ilosc):
    flaga(10 * x)
    turtle.left(kat)

turtle.mainloop()
turtle przykład figury

itd.

Prostokąt

(ang: rectangle)

Aby narysować prostokąt należy powtórzyć dwa razy: narysuj krótszy bok, skręć w prawo (lub lewo) o 90 stopni, narysuj dłuższy bok.

Podczas rysowania żółw w sumie wykonuje obrót o 360 stopni a ponieważ robi 4 skręty więc każdy z nich ma 360/4 = 90 stopni.

import turtle

for _ in range(2):
    turtle.forward(300)
    turtle.left(90)
    turtle.forward(150)
    turtle.left(90)

turtle.mainloop()
rysowanie w turtle - prostokat - przykład

Można to zamienić na funkcję

import turtle

def prostokat(a, b):
    for _ in range(2):
        turtle.forward(a)
        turtle.left(90)
        turtle.forward(b)
        turtle.left(90)

prostokat(300, 150)

turtle.mainloop()

Teraz można narysować wiele prostokątów z obracaniem

import turtle
def prostokat(a, b):
    for _ in range(2):
        turtle.forward(a)
        turtle.left(90)
        turtle.forward(b)
        turtle.left(90)

a = 150
b = 100

ilosc = 36
kat = 360/ilosc

for _ in range(ilosc):
    prostokat(300, 150)
    turtle.left(kat)

turtle.mainloop()

Ilosc = 5

rysowanie w turtle - prostokat - przykład

Ilosc = 36

rysowanie w turtle - prostokat - przykład

Z prostokątów można stworzyć wzorek

import turtle

def prostokat(a, b):
    for _ in range(2):
        turtle.forward(a)
        turtle.left(90)
        turtle.forward(b)
        turtle.left(90)

a = 200
b = 100

for _ in range(4):
    prostokat(a, b)
    turtle.forward(a-b)
    turtle.right(90)

turtle.mainloop()
rysowanie w turtle - prostokat - przykład

Można też dodać odstępy między prostokątami

import turtle

def prostokat(a, b):
    for _ in range(2):
        turtle.forward(a)
        turtle.left(90)
        turtle.forward(b)
        turtle.left(90)

a = 200
b = 100
for _ in range(4):
    prostokat(a, b)
    turtle.forward(a-b)
    turtle.right(90)

    turtle.penup()
    turtle.forward(30)
    turtle.pendown()

turtle.mainloop()
rysowanie w turtle - prostokat - przykład
Książki: python-dla-kazdego-podstawy-programowania python-wprowadzenie python-leksykon-kieszonkowy python-receptury python-programuj-szybko-i-wydajnie python-projekty-do-wykorzystania black-hat-python-jezyk-python-dla-hackerow-i-pentesterow efektywny-python-59-sposobow-na-lepszy-kod tdd-w-praktyce-niezawodny-kod-w-jezyku-python aplikacje-internetowe-z-django-najlepsze-receptury