From 10e04f87447258326eb08e8bf4141a211c84db7e Mon Sep 17 00:00:00 2001 From: Tanguy Deleplanque Date: Mon, 30 Jun 2025 00:16:25 +0200 Subject: [PATCH] =?UTF-8?q?day=2018=20-=20boring=20turtle=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 018/image.jpg | Bin 0 -> 19411 bytes 018/main.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 018/sandbox.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 018/image.jpg create mode 100644 018/main.py create mode 100644 018/sandbox.py diff --git a/018/image.jpg b/018/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e31799e06cb507588fd1089a1ed0391802cd681f GIT binary patch literal 19411 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%0A1|CvxDo4iCgx+7H9Y6O4osOK{?m-otr`WnY5a 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 BA&US2 literal 0 HcmV?d00001 diff --git a/018/main.py b/018/main.py new file mode 100644 index 0000000..2ca513d --- /dev/null +++ b/018/main.py @@ -0,0 +1,55 @@ +import colorgram +import turtle +import random + +def create_colorset(colors_nb): + colors = colorgram.extract('/Users/tanguy/Workspace/python/bootcamp/018/image.jpg', colors_nb) + return(colors) + +def extract_random_color_from_set(colorset): + color = random.choice(colorset) + return(color.rgb) + +def set_initial_position(t): + t.pu() + t.backward(400) + t.left(90) + t.backward(400) + t.right(90) + +def draw_line(t): + for _ in range(11): + t.pd() + t.dot(20, extract_random_color_from_set(colorset)) + t.pu() + t.forward(40) + +def go_to_next_line(t): + t.left(90) + t.forward(40) + t.left(90) + t.forward(440) + t.right(180) + +colorset = create_colorset(20) + +t = turtle.Turtle() +turtle.colormode(255) +t.speed("fastest") +t.hideturtle() + + +set_initial_position(t) +for _ in range(10): + draw_line(t) + go_to_next_line(t) + + + + + + + + +screen = turtle.Screen() +screen.exitonclick() \ No newline at end of file diff --git a/018/sandbox.py b/018/sandbox.py new file mode 100644 index 0000000..65d3201 --- /dev/null +++ b/018/sandbox.py @@ -0,0 +1,52 @@ +from turtle import Turtle, Screen +import random + +def draw_square(turtle): + for _ in range(4): + turtle.forward(100) + turtle.right(90) + +def draw_dashed_line(turtle): + for i in range(30): + if i % 2 == 0: + turtle.up() + else: + turtle.down() + turtle.forward(10) + +def draw_shapes(turtle): + for sides_number in range(3, 11): + rgb = () + for _ in range(3): + rgb += (random.random(),) + + turtle.pencolor(rgb[0], rgb[1] ,rgb[2]) + angle = 360 / sides_number + + for _ in range(0, sides_number): + turtle.forward(100) + turtle.right(angle) + +def draw_spirograph(turtle, nb_circles): + angle = 360 / nb_circles + for _ in range(0, nb_circles): + rgb = () + for _ in range(3): + rgb += (random.random(),) + turtle.pencolor(rgb[0], rgb[1] ,rgb[2]) + turtle.circle(100) + turtle.left(angle) + + + +turtle = Turtle() +turtle.speed("fastest") +# draw_square(turtle) +# draw_dashed_line(turtle) +# draw_shapes(turtle) +draw_spirograph(turtle, 180) + +screen = Screen() +screen.exitonclick() + +turtle.pencolor \ No newline at end of file