Модуль «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)