Rozwiązanie zadania 1 z konkursu miniLOGIA 15 (2016/17) etap 1

„miniLOGIA grafika w Logo” to konkurs informatyczny dla uczniów szkół podstawowych województwa mazowieckiego organizowany przez Ośrodek Edukacji Informatycznej i Zastosowań Komputerów (OEIiZK) na zlecenie Mazowieckiego Kuratora Oświaty. Konkurs składa się z trzech etapów, podczas których uczniowie samodzielnie rozwiązują zadania graficzne w językach Logo lub Python (z zainstalowanym modułem turtle).

W serii artykułów przedstawię rozwiązania zadań w języku Python, opracowane przeze mnie na potrzeby tej strony. Jako środowisko, w którym opracowałem rozwiązania zadań wykorzystałem zalecane przez organizatora oprogramowanie Python 3.5.*.

Zadanie 1

Napisz bezparametrową procedurę/funkcję panda, po wywołaniu której powstanie rysunek głowy pandy, taki jak poniżej. Długość boku największego wielokąta wynosi 80, boki wielokątów tworzących oko i ucho pandy są tej samej długości. Pozostałe długości odcinków i proporcje odczytaj z rysunków pomocniczych.
Rozwiązanie:

from turtle import *

a=10

def szescian(bok):
    begin_fill()
    for i in range(6):
        fd(bok)
        rt(60)
    end_fill()

def oko():
    pu()
    rt(60)
    fd(8*a)
    lt(60)
    fd(a)
    for i in range(2):
        rt(60)
        fd(a*2)
    rt(60)
    bk(a)
    pd()
    fillcolor('black')
    szescian(a*4)
    fd(a)
    fillcolor('white')
    szescian(a*2)
    fd(a/2)
    fillcolor('black')
    szescian(a)
    pu()
    bk(a/2)
    rt(120)
    for i in range(2):
        fd(a*2)
        lt(60)
    fd(a)
    rt(60)
    fd(a*8)
    rt(120)
    pd()

def ucho():
    fd(a*2)
    begin_fill()
    for i in range(8):
        fd(a*4)
        lt(45)
    end_fill()
    fd(a*6)
        
def oko_i_ucho():
    oko()
    ucho()
    rt(30)

def nos_i_usta():
    pu()
    rt(60)
    fd(8*a)
    lt(30)
    szescian(a*2)
    lt(90)
    pd()
    for i in range(4):
        fd(2*a)
        rt(45)
    for i in range(4):
        lt(45)
        bk(2*a)
    lt(60)
    for i in range(4):
        fd(2*a)
        lt(45)
    for i in range(4):
        rt(45)
        bk(2*a)
    

def glowa():
    for i in range(4):
        fd(a*8)
        rt(30)
    oko_i_ucho()
    for i in range(3):
        fd(a*8)
        rt(30)
    oko_i_ucho()
    for i in range(3):
        fd(a*8)
        rt(30)
    nos_i_usta()

def panda():
    reset()
    pu()
    lt(90)
    bk(200)
    lt(90)
    bk(40)
    pd()
    glowa()

Wynik działania programu:

 

panda()

 

Plik Python z rozwiązaniem zadania do pobrania.