Изображение гика

Блог питониста

Поздравляем кого-то с днем рождения, используя питон

24 июня 2018 г.

Иногда у кого-нибудь день рождения, и ты хочешь ее/его поздравить, но не знаешь как. Но ты знаешь, что хочешь сделать что-то своими руками. Можно, конечно чего-нибудь придумать с ардуино, но часто просто лень. Может быть, можно сделать какую-нибудь простую анимацию? Да, и в стандартной библиотеке есть модуль turtle.

Исходная идея не моя, взял тут. Торт хороший, мне очень нравится, но, разумеется, надо добавить что-то свое. Я буду рисовать солнышко:

 1 # -*- coding: utf-8 -*-
 2 import turtle
 3 import time
 4 
 5 # set the background color for the page
 6 bg = turtle.Screen()
 7 bg.bgcolor("light blue")
 8 
 9 
10 my_turtle = turtle.Turtle()
11 my_turtle.shape("turtle")
12 my_turtle.speed(1)
13 
14 # draw sun
15 my_turtle.color("yellow")
16 my_turtle.pensize(3)
17 my_turtle.penup()
18 my_turtle.setposition(150, 150)
19 my_turtle.begin_fill()
20 my_turtle.pendown()
21 my_turtle.circle(50)
22 my_turtle.end_fill()
23 
24 # draw rays
25 my_turtle.penup()
26 my_turtle.goto(150, 140)
27 my_turtle.pendown()
28 my_turtle.goto(150, 130)
29 
30 my_turtle.penup()
31 my_turtle.goto(150, 260)
32 my_turtle.pendown()
33 my_turtle.goto(150, 270)
34 
35 my_turtle.penup()
36 my_turtle.goto(210, 200)
37 my_turtle.pendown()
38 my_turtle.goto(220, 200)
39 
40 my_turtle.penup()
41 my_turtle.goto(90, 200)
42 my_turtle.pendown()
43 my_turtle.goto(80, 200)
44 
45 # I quad
46 my_turtle.penup()
47 my_turtle.goto(185+7, 165-7)
48 my_turtle.pendown()
49 my_turtle.goto(185+14, 165-14)
50 
51 # II quad
52 my_turtle.penup()
53 my_turtle.goto(185+7, 235+7)
54 my_turtle.pendown()
55 my_turtle.goto(185+14, 235+14)
56 
57 # III quad
58 my_turtle.penup()
59 my_turtle.goto(115-7, 235+7)
60 my_turtle.pendown()
61 my_turtle.goto(115-14, 235+14)
62 
63 # IV quad
64 my_turtle.penup()
65 my_turtle.goto(115-7, 165-7)
66 my_turtle.pendown()
67 my_turtle.goto(115-14, 165-14)

На строке 12 задается скорость отрисовки, можете поиграть с этим параметром. Стр. 15-22 - отрисовка самого тела солнца. Потом стр. 25-43 я рисую сначала перпендикулярные лучи, а потом строки 46-67 - четыре диагональные луча. Ну а потом, просто добавлю отрисовку торта, в итоге получилось:

  1 # -*- coding: utf-8 -*-
  2 import turtle
  3 import time
  4 
  5 # set the background color for the page
  6 bg = turtle.Screen()
  7 bg.bgcolor("light blue")
  8 
  9 
 10 my_turtle = turtle.Turtle()
 11 my_turtle.shape("turtle")
 12 my_turtle.speed(1)
 13 
 14 # draw sun
 15 my_turtle.color("yellow")
 16 my_turtle.pensize(3)
 17 my_turtle.penup()
 18 my_turtle.setposition(150, 150)
 19 my_turtle.begin_fill()
 20 my_turtle.pendown()
 21 my_turtle.circle(50)
 22 my_turtle.end_fill()
 23 
 24 # draw rays
 25 my_turtle.penup()
 26 my_turtle.goto(150, 140)
 27 my_turtle.pendown()
 28 my_turtle.goto(150, 130)
 29 
 30 my_turtle.penup()
 31 my_turtle.goto(150, 260)
 32 my_turtle.pendown()
 33 my_turtle.goto(150, 270)
 34 
 35 my_turtle.penup()
 36 my_turtle.goto(210, 200)
 37 my_turtle.pendown()
 38 my_turtle.goto(220, 200)
 39 
 40 my_turtle.penup()
 41 my_turtle.goto(90, 200)
 42 my_turtle.pendown()
 43 my_turtle.goto(80, 200)
 44 
 45 # I quad
 46 my_turtle.penup()
 47 my_turtle.goto(185+7, 165-7)
 48 my_turtle.pendown()
 49 my_turtle.goto(185+14, 165-14)
 50 
 51 # II quad
 52 my_turtle.penup()
 53 my_turtle.goto(185+7, 235+7)
 54 my_turtle.pendown()
 55 my_turtle.goto(185+14, 235+14)
 56 
 57 # III quad
 58 my_turtle.penup()
 59 my_turtle.goto(115-7, 235+7)
 60 my_turtle.pendown()
 61 my_turtle.goto(115-14, 235+14)
 62 
 63 # IV quad
 64 my_turtle.penup()
 65 my_turtle.goto(115-7, 165-7)
 66 my_turtle.pendown()
 67 my_turtle.goto(115-14, 165-14)
 68 
 69 shift = 90
 70 # draw lines
 71 my_turtle.penup()
 72 my_turtle.goto(-190, -180-shift)
 73 my_turtle.color("yellow")
 74 my_turtle.pensize(6)
 75 my_turtle.pendown()
 76 my_turtle.goto(190, -180-shift)
 77 
 78 my_turtle.penup()
 79 my_turtle.goto(-160, -150-shift)
 80 my_turtle.color("purple")
 81 my_turtle.pensize(6)
 82 my_turtle.pendown()
 83 my_turtle.goto(160, -150-shift)
 84 
 85 my_turtle.penup()
 86 my_turtle.goto(-130, -120-shift)
 87 my_turtle.color("teal")
 88 my_turtle.pensize(6)
 89 my_turtle.pendown()
 90 my_turtle.goto(130, -120-shift)
 91 
 92 # draw cake
 93 my_turtle.penup()
 94 my_turtle.goto(-74, -110-shift)
 95 my_turtle.pendown()
 96 my_turtle.color("white")
 97 my_turtle.goto(50, -110-shift)
 98 my_turtle.left(90)
 99 my_turtle.forward(60)
100 my_turtle.left(90)
101 my_turtle.forward(125)
102 my_turtle.left(90)
103 my_turtle.forward(60)
104 
105 # draw candles
106 my_turtle.penup()
107 my_turtle.goto(-60, -40-shift)
108 my_turtle.color("aquamarine")
109 my_turtle.pendown()
110 my_turtle.pensize(3)
111 my_turtle.goto(-60, -20-shift)
112 
113 my_turtle.penup()
114 my_turtle.goto(-40, -40-shift)
115 my_turtle.color("yellow")
116 my_turtle.pendown()
117 my_turtle.pensize(3)
118 my_turtle.goto(-40, -20-shift)
119 
120 my_turtle.penup()
121 my_turtle.goto(-20, -40-shift)
122 my_turtle.color("green")
123 my_turtle.pendown()
124 my_turtle.pensize(3)
125 my_turtle.goto(-20, -20-shift)
126 
127 my_turtle.penup()
128 my_turtle.goto(0, -40-shift)
129 my_turtle.color("pink")
130 my_turtle.pendown()
131 my_turtle.pensize(3)
132 my_turtle.goto(0, -20-shift)
133 
134 my_turtle.penup()
135 my_turtle.goto(20, -40-shift)
136 my_turtle.color("blue")
137 my_turtle.pendown()
138 my_turtle.pensize(3)
139 my_turtle.goto(20, -20-shift)
140 
141 
142 # print message
143 my_turtle.penup()
144 my_turtle.goto(-300, 70-shift)
145 my_turtle.color("grey")
146 my_turtle.pendown()
147 my_turtle.write(
148     "С днём рождения, %username%!", move=False,
149     font=("Helvetica", 24, "bold"))
150 
151 
152 # send the turtle to the corner
153 my_turtle.penup()
154 my_turtle.goto(-250, 250)
155 time.sleep(10)

Вроде ок, но чего-то не хватает, можно попробовать каким-то образом добавить проигрывание трека happy birthday, может переделать это все на pygame. Но я сделал проще: записал видео с экрана и потом на него добавил трек. Если хотите, то вы можете использовать pyinstaller, чтобы сделать из этого скриптика exe.

Метки

python жизнь
Если вам понравился пост, можете поделиться им в соцсетях: