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

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

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

24 июня 2018 г.

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

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

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

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

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

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

Метки

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