/
IT-Legion
/
animations_in_python
Обзор
Документация
Войти
/
IT-Legion
/
animations_in_python
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
conditional_operators.py
139 строк
8 KB
IT-Legion
create: conditional_operatos_vertical.py, update: conditional_operators.py
28 апр 2026, 01:02
Верифицирован
28 апр 2026, 01:02
138a466
Код
Авторство
О чём код?
from manim import * class RainCheckFlowchart(Scene): def construct(self): x_left, x_center, x_right = -4, 0, 4 y_start, y_cond, y_action, y_end = 3.0, 0.8, -1.0, -2.6 block_w = 3.2 cond_half_w, cond_half_h = block_w / 2, 0.8 zoom_scale = 0.72 start = Rectangle(height=1.1, width=block_w, color=BLUE).move_to([x_left, y_start, 0]) if_block = Polygon(UP*cond_half_h, RIGHT*cond_half_w, DOWN*cond_half_h, LEFT*cond_half_w, color=GREEN).move_to([x_left, y_cond, 0]) elif_block = Polygon(UP*cond_half_h, RIGHT*cond_half_w, DOWN*cond_half_h, LEFT*cond_half_w, color=PURPLE).move_to([x_center, y_cond, 0]) else_block = Polygon(UP*cond_half_h, RIGHT*cond_half_w, DOWN*cond_half_h, LEFT*cond_half_w, color=ORANGE).move_to([x_right, y_cond, 0]) action_if_block = Rectangle(height=1.1, width=block_w, color=TEAL).move_to([x_left, y_action, 0]) action_elif_block = Rectangle(height=1.1, width=block_w, color=TEAL).move_to([x_center, y_action, 0]) action_else_block = Rectangle(height=1.1, width=block_w, color=TEAL).move_to([x_right, y_action, 0]) end_block = Rectangle(height=1.1, width=(x_right-x_left)+block_w, color=RED).move_to([(x_left+x_right)/2, y_end, 0]) start_text = Text("начало", font_size=36).move_to(start) if_text = Text("if <условие> :", font_size=24).move_to(if_block) elif_text = Text("elif <условие> :", font_size=22).move_to(elif_block) else_text = Text("else:", font_size=24).move_to(else_block) action_if_text = Text("действие", font_size=28).move_to(action_if_block) action_elif_text = Text("действие", font_size=28).move_to(action_elif_block) action_else_text = Text("действие", font_size=28).move_to(action_else_block) end_text = Text("конец", font_size=36).move_to(end_block) arrow_start = Arrow(start.get_bottom(), if_block.get_top(), color=YELLOW, buff=0.1) arrow_if_no = Arrow(if_block.get_right(), elif_block.get_left(), color=PURPLE, buff=0.1) arrow_elif_no = Arrow(elif_block.get_right(), else_block.get_left(), color=ORANGE, buff=0.1) line_if_yes = Arrow(if_block.get_bottom(), action_if_block.get_top(), color=RED, buff=0.05) line_elif_yes = Arrow(elif_block.get_bottom(), action_elif_block.get_top(), color=RED, buff=0.05) line_else = Arrow(else_block.get_bottom(), action_else_block.get_top(), color=RED, buff=0.05) line_if_to_end = Arrow(action_if_block.get_bottom(), [action_if_block.get_x(), end_block.get_top()[1], 0], color=RED, buff=0.05) line_elif_to_end = Arrow(action_elif_block.get_bottom(), [action_elif_block.get_x(), end_block.get_top()[1], 0], color=RED, buff=0.05) line_else_to_end = Arrow(action_else_block.get_bottom(), [action_else_block.get_x(), end_block.get_top()[1], 0], color=RED, buff=0.05) if_no_label = Text("нет", font_size=22, color=PURPLE).next_to(arrow_if_no, UP, buff=0.1) elif_no_label = Text("нет", font_size=22, color=ORANGE).next_to(arrow_elif_no, UP, buff=0.1) if_yes_label = Text("да", font_size=22, color=RED).next_to(line_if_yes, LEFT, buff=0.1) elif_yes_label = Text("да", font_size=22, color=RED).next_to(line_elif_yes, LEFT, buff=0.1) all_objects = VGroup( start, start_text, if_block, if_text, elif_block, elif_text, else_block, else_text, action_if_block, action_if_text, action_elif_block, action_elif_text, action_else_block, action_else_text, end_block, end_text, arrow_start, arrow_if_no, arrow_elif_no, line_if_yes, line_elif_yes, line_else, line_if_to_end, line_elif_to_end, line_else_to_end, if_no_label, elif_no_label, if_yes_label, elif_yes_label ) self.play(Create(start), Write(start_text)) self.wait(0.2) self.play(Create(arrow_start)) self.wait(0.2) self.play(Create(if_block), Write(if_text)) self.wait(0.2) self.play(Create(line_if_yes), Write(if_yes_label)) self.wait(0.2) self.play(Create(action_if_block), Write(action_if_text)) self.wait(0.2) self.play(Create(arrow_if_no), Write(if_no_label)) self.wait(0.2) self.play(Create(elif_block), Write(elif_text)) self.wait(0.2) self.play(Create(line_elif_yes), Write(elif_yes_label)) self.wait(0.2) self.play(Create(action_elif_block), Write(action_elif_text)) self.wait(0.2) self.play(Create(arrow_elif_no), Write(elif_no_label)) self.wait(0.2) self.play(Create(else_block), Write(else_text)) self.wait(0.2) self.play(Create(line_else)) self.wait(0.2) self.play(Create(action_else_block), Write(action_else_text)) self.wait(0.2) self.play(Create(line_if_to_end), Create(line_elif_to_end), Create(line_else_to_end)) self.wait(0.2) self.play(Create(end_block), Write(end_text)) self.wait(1) self.wait(1) self.play(all_objects.animate.scale(zoom_scale, about_point=ORIGIN).move_to(ORIGIN), run_time=1.2) self.wait(0.3) self.play(FadeOut(arrow_elif_no), FadeOut(elif_no_label)) self.wait(0.1) else_group = VGroup( else_block, else_text, line_else, action_else_block, action_else_text, line_else_to_end ) self.play(else_group.animate.shift(RIGHT * 4 * zoom_scale), run_time=0.8) self.wait(0.1) new_end_left_x = if_block.get_x() new_end_right_x = else_block.get_x() new_end_center_x = (new_end_left_x + new_end_right_x) / 2 new_end_width = (new_end_right_x - new_end_left_x) + block_w * zoom_scale new_end_y = end_block.get_y() new_end_block = Rectangle(height=1.1*zoom_scale, width=new_end_width, color=RED).move_to([new_end_center_x, new_end_y, 0]) self.play(Transform(end_block, new_end_block), end_text.animate.move_to(new_end_block), run_time=0.7) self.wait(0.2) new_else_to_end = Arrow(action_else_block.get_bottom(), [action_else_block.get_x(), new_end_block.get_top()[1], 0], color=RED, buff=0.05) self.play(Create(new_else_to_end)) self.wait(0.1) new_elif_x = (elif_block.get_x() + else_block.get_x()) / 2 new_elif_y = elif_block.get_y() new_action_y = action_elif_block.get_y() s = zoom_scale new_elif_block = Polygon(UP*cond_half_h*s, RIGHT*cond_half_w*s, DOWN*cond_half_h*s, LEFT*cond_half_w*s, color=PURPLE).move_to([new_elif_x, new_elif_y, 0]) new_elif_text = Text("elif <условие> :", font_size=int(22*s)).move_to(new_elif_block) new_action_block = Rectangle(height=1.1*s, width=block_w*s, color=TEAL).move_to([new_elif_x, new_action_y, 0]) new_action_text = Text("действие", font_size=int(28*s)).move_to(new_action_block) new_from_elif = Arrow(elif_block.get_right(), new_elif_block.get_left(), color=PURPLE, buff=0.05) new_to_else = Arrow(new_elif_block.get_right(), else_block.get_left(), color=ORANGE, buff=0.05) new_yes_line = Arrow(new_elif_block.get_bottom(), new_action_block.get_top(), color=RED, buff=0.05) new_to_end = Arrow(new_action_block.get_bottom(), [new_action_block.get_x(), new_end_block.get_top()[1], 0], color=RED, buff=0.05) new_no_label = Text("нет", font_size=int(20*s), color=ORANGE).next_to(new_to_else, UP, buff=0.08) new_yes_label = Text("да", font_size=int(20*s), color=RED).next_to(new_yes_line, LEFT, buff=0.08) self.play(Create(new_from_elif)) self.wait(0.15) self.play(Create(new_elif_block), Write(new_elif_text)) self.wait(0.15) self.play(Create(new_yes_line), Write(new_yes_label)) self.wait(0.15) self.play(Create(new_action_block), Write(new_action_text)) self.wait(0.15) self.play(Create(new_to_else), Write(new_no_label)) self.wait(0.15) self.play(Create(new_to_end)) self.wait(1)