Академия Eduson

Модуль «turtle». Часть 3

 Модуль черепашки. Часть 3

 Команды:

  • turtle.write()  — вывода текста в графическое окно;
  • аргументы команды write():
    • arg — текст, который нужно вывести;
    • move – указывает будет ли двигаться черепашка по мере рисования надписи (по умолчанию значение False);
    • align – служит для выравнивания надписи относительно черепашки, может принимать три строковых значения right, center, left (по умолчанию значению right);
    • font – кортеж из трех значений: (название шрифта, размер шрифта, тип начертания). В качестве начертания можно использовать строковые значения: normal — обычный, bold — полужирный, italic — курсив, или объединить два последних, тогда текст будет напечатан полужирным курсивом;
  • turtle.begin_fill() — заполнения геометрической фигуры цветом, она применяется до начертания фигуры;
  • turtle.end_fill() — используется после завершения начертания и геометрическая фигура заполняется текущим цветом заливки;
  • turtle.fillcolor()  — изменить цвет заливки;
  • onkey(fun, key) — отслеживание нажатия клавиш клавиатуры;
  • turtle.Screen().listen() — установить фокус на экран черепашки;
  • onclick(fun)  —отслеживания нажатия мыши

 Напишите программу, которая рисует изображение домика.

import turtle

turtle.fillcolor('blue')
turtle.begin_fill()
for i in range(4):
    turtle.forward(100)
    turtle.left(90)
turtle.end_fill()

turtle.up()
turtle.setposition(-20, 100)
turtle.down() 

turtle.fillcolor('brown')
turtle.begin_fill()
for i in range(3):
    turtle.forward(140)
    turtle.left(120)
turtle.end_fill()

 Напишите программу, которая рисует изображение светофора.

import turtle as t

t.begin_fill()
for i in range(2):
    t.forward(40)
    t.left(90)
    t.forward(130)
    t.left(90)
t.end_fill()

def circle(a):
    t.begin_fill()
    t.circle(a)
    t.end_fill()

t.setpos(20, 10)   
t.fillcolor('green')
circle(15)  
t.up()
t.setpos(20, 50)  
t.down()
t.fillcolor('yellow')
circle(15) 

t.up()
t.setpos(20, 90)  
t.down()
t.fillcolor('red')
circle(15) 

t.hideturtle() 

 Напишите программу, которая рисует оптическую иллюзию.

import turtle as t

t.hideturtle()
for _ in range(3):
    t.forward(150)
    t.left(120)

t.fillcolor("black")
t.up()
t.setpos(0, 75)
t.begin_fill()
t.circle(20)
t.end_fill()

t.up()
t.setpos(150, 75)
t.begin_fill()
t.circle(20)
t.end_fill()

t.up()
t.setpos(75, -60)
t.begin_fill()
t.circle(20)
t.end_fill()

t.up()
t.fillcolor("white")
t.pencolor("white")
t.goto(75, -40)
t.setheading(60)
t.begin_fill()
t.down()

for _ in range(3):
    t.forward(155)
    t.left(120)

t.end_fill()

 Напишите программу, которая рисует изображение радуги.

from turtle import *

c  = ((255,38, 0), (255,170,0), (212,250,0), (49,250,0), (0,250,121),
(0,253,255), (0,128,255), (68,52,255), (216,60,255), (255,50,169))
goto(0, -100)

for i in range(10):
  begin_fill()
  fillcolor(c[i])
  circle(150 - 15 * i)
  end_fill()
  left(90)
  penup()
  forward(15)
  pendown()
  right(90)
  hideturtle()

 Напишите программу, которая рисует изображение полумесяца.

import turtle as t

t.Screen().bgcolor('darkblue')
t.up()
t.setpos(-20, -20)
t.down()
t.fillcolor('orange')
t.begin_fill()
t.circle(50)
t.end_fill()

t.up()
t.setpos(0, -20)
t.down()
t.color('darkblue')
t.fillcolor('darkblue')
t.begin_fill()
t.circle(50)
t.end_fill()

 Напишите программу, которая рисует анимированное изображение фаз луны.

import turtle as t

t.Screen().bgcolor("blue")
t.penup()
t.hideturtle()
t.speed(0)
t.tracer(10, 0)

while True:
  for i in range(400):
    t.clear()
    t.goto(0, 0)
    t.dot(200, "yellow")
    t.goto(200-i, 0)
    t.dot(200, "blue")

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

import turtle as t
from random import randrange

t.speed(0)

def star(size, color):
    t.tracer(100)
    t.pencolor(color)
    t.fillcolor(color)
    t.begin_fill()
    t.setheading(randrange(0, 361))

    for _ in range(5):
        t.forward(size)
        t.right(144)
    t.end_fill()

for _ in range(100):
    size = randrange(5, 20)
    color = (randrange(256), randrange(256), randrange(256))
    t.up()
    t.setpos(randrange(-200, 200), randrange(-200, 200))
    t.down()
    star(size, color)

t.hideturtle() 

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

from turtle import *
from random import randint
from math import tan, sqrt, radians

square = 4000

def draw_figure(n):
    size = sqrt(4 * square * tan(radians(180 / n)) / n)
    fillcolor(tuple((randint(0, 255) for _ in range(3))))

    begin_fill()

    forward(size / 2)
    left(360 / n)

    for i in range(n - 1):
        forward(size)
        left(360 / n)
    forward(size / 2)

    end_fill()

Screen().bgcolor('white')
Screen().setup(800, 800)
Screen().tracer(1, 0)
speed(0)
ht()

for x in range(5):
    for y in range(5):
        penup()
        goto(x * 100 - 200, y * 100 - 200)
        pendown()
        draw_figure(randint(3, 8))

 Напишите программу, которая рисует изображение шахматной доски.

import turtle as t

t.speed(10)
n = 39
t.goto(0, -n)

for _ in range(4):
  t.forward(5 * n)
  t.left(90)

t.penup()

for x in range(5):
  for y in range(5):
    if (x + y) % 2 == 0:
      t.goto(x * n, y * n)
      t.begin_fill()
      for _ in range(4):
        t.forward(n)
        t.right(90)
      t.end_fill()

t.hideturtle()

 Напишите программу, которая рисует изображение компаса.

from turtle import *

speed(0)
hideturtle()
name = ["Восток", "Север", "Запад", "Юг"]
pos = ['left', 'center', 'right', 'center']

for i in range(4):
    forward(75)
    penup()
    if i == 2 or i == 0:
        forward(10)
    elif i == 1:
        forward(5)
    else:
        forward(15)
    write(name[i], align=pos[i])
    goto(0, 0)
    pendown()
    left(90)

goto(0, -25)
circle(25)

 

 Напишите программу, которая рисует солнечную систему.

from turtle import *
from math import radians, sin, cos

Screen().setup(800, 300)
speed(8)

solars = (('Солнце', 'yellow', 50, (-100, 40)), 
          ('Меркурий', 'DarkOrange', 10, (-55, 37)), 
          ('Венера', 'DarkOrange', 13, (-10, 39)), 
          ('Земля', 'green', 12, (25, 42)), 
          ('Марс', 'indianred', 8, (80, 25)), 
          ('Юпитер', 'DarkOrange', 24, (150, 25)), 
          ('Сатурн', 'DarkOrange', 24, (210, 33)), 
          ('Уран', 'CadetBlue', 16, (255, 33)), 
          ('Нептун', 'blue', 16, (300, 45)), 
          ('Плутон', 'DarkOrange', 5, (150, 20)))

def write_name(name):
  penup()
  right(90)
  forward(25)
  fillcolor('black')
  write(name, align='center')
  backward(10)
  left(90)

def ellipse(a, b):
  dx = xcor()
  dy = ycor()
  for deg in range(361):
    rad = radians(deg)
    x = a * sin(rad) + dx
    y = -b * cos(rad) + b + dy
    goto(x, y)

penup()
goto(-200, 0)
pendown()

for s in solars:
  write_name(s[0])
  fillcolor(s[1])
  begin_fill()
  pendown()
  circle(s[2])
  end_fill()
  penup()
  goto(s[3])

pendown()
fillcolor('black')
ellipse(30, 15)

hideturtle()

 Напишите программу, которая рисует знак STOP.

import turtle as t

t.hideturtle()
t.speed(0)
t.penup()
t.goto(-75, - 100)
t.pensize(6)
t.setheading(-22.5)
t.pendown()
t.circle(150, 360, 8)
t.penup()
t.goto(-69, -86)
t.pencolor('red')
t.pendown()
t.fillcolor('red')

t.begin_fill()
t.circle(135, 360, 8)
t.end_fill()

t.penup()
t.goto(-135, 0)
t.fillcolor('white')
t.write('STOP', font=('Arial', 65, 'normal'))

 Напишите программу, которая рисует силуэты многоэтажек. Разделите программу на функции:

  • рисования контуров зданий;
  • рисования нескольких окон в зданиях;
  • рисования случайно разбросанных звезд в виде точек (убедитесь, что звезды появляются на небе, а не на зданиях).
import turtle
from random import *

turtle.Screen().bgcolor(0,20,90)
turtle.speed(4)

turtle.hideturtle()
lst = [[90, 40], [-90, 100], [90, 40], [-90, 170], [-90, 60], [90, 120], [90, 50], [-90, 100], [-90, 50], [90, 70], [-90, 80], [90, 50], [-90, 50], [90, 70], [-90, 60], [90, 120]]

def tower():
    st = turtle.Turtle()
    st.speed(0)
    st.up()
    st.setpos(-200, -200)
    st.down()

    st.pencolor(0, 20, 150)

    st.fillcolor(0, 20, 150)

    st.begin_fill()
    for l in lst:
        st.forward(l[1])
        st.left(l[0])
    st.end_fill()

    st.hideturtle()

def sky():
    sk = turtle.Turtle()
    sk.speed(0)

    for _ in range(70):
        sk.up()
        sk.setpos(randint(-170, 170), randint(-30, 180))
        sk.down()
        sk.dot(randint(2,  5), 'yellow')

    sk.hideturtle()

def windows():
    ps = turtle.Turtle()
    ps.speed(0)
    poss = [[0, 10], [0, 0], [10, -30], [50, -60], [-80, 30], [-60, 20], [-60, -10], [-60, -50]]

    for p in poss:
        ps.up()
        ps.setpos(p[0], p[1])
        ps.down()

        ps.fillcolor('yellow')
        ps.begin_fill()

        for _ in range(4):
            ps.left(90)
            ps.forward(10)  
        ps.end_fill()

sky()
tower()
windows()

 Напишите программу, которая рисует изображение сердца.

import turtle
from math import *

turtle.penup()

turtle.fillcolor('red')

turtle.begin_fill()
t = 0
for _ in range(628):
  x = 128*sin(t)**3
  y = 8*(13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t) - 5)
  turtle.goto(x, y)
  t += 0.01

turtle.end_fill()

turtle.hideturtle()

 Напишите программу, которая по нажатию на левую кнопку мыши рисует звезду в месте клика. Фон изображения должен быть черным, при этом звезды могут иметь разные размеры, цвета и иметь разное количество сторон.

from turtle import *
from random import randrange

def on_click(x, y):
  pu(), goto(x, y), color(randrange(256), randrange(256), randrange(256)), begin_fill(), pd(), rt(randrange(36))
  g = randrange(5, 16, 2)
  d = randrange(5, 30)

  for _ in range(g):
    fd(d), rt(180 - 180/g)

  end_fill()

hideturtle(), speed(0), Screen().bgcolor('black')
Screen().onscreenclick(on_click)