Today I discovered the turtle library for python.

 If you are old enough to remember the educational programming language Logo, then you might remember spending hours in your school’s BBC microcomputer lab playing with this electronic turtle.

 Logo provides a way of drawing line graphics and patterns using simple commands such as ‘forward’ and ‘right’. Logo is a good way of teaching and learning ‘Computational Thinking’ or the basics of programming. Today you can experience the same fun on your Raspberry Pi or Python interpreter on your PC, as the turtle library is included in the standard distribution.

 After playing with a few random walks (which I may post at a later date), I had a go at creating a working analogue clock, and I am rather pleased with the results. Thanks to Sonny for his enthusiasm and suggested improvements.

Python 3 analogue clock using the turtle graphics library. 


 You can download the code, or copy it from below.

#Turtle Analogue Clock
#Tim Street
#version 1.6
#2017-06-23
#SHOWS GMT NOT BST

 import turtle
import time

 print("Python Turtle Analogue Clock")
print("By T Street")

 
 #Deal with different time zones
ok = False
while not(ok):
print("\nFor example, for British summer time enter 1")
offset = int(input("Enter offset from GMT (-11 to 11) :"))
if offset >= -11 and offset <= 11:
ok = True

wn = turtle.Screen()
wn.title("TURTLE CLOCK")

 SCALE = 1.7 # size of clock scale factor (try 2.0 to 0.5)

 #create dial
mark = turtle.Turtle()
mark.speed(200)
mark.shape("circle")
for i in range(60):
 if i % 5 == 0:
 mark.pensize(10)
 mark.penup()
 mark.forward(200*SCALE)
 mark.pendown()
 mark.forward(10*SCALE)
 mark.penup()
 mark.backward(210*SCALE)
 else:
 mark.pensize(5)
 mark.penup()
 mark.forward(200*SCALE)
 mark.pendown()
 mark.forward(5*SCALE)
 mark.penup()
 mark.backward(205*SCALE) 
 mark.right(6)

 
 update = True #controls whether minute and hour hand should update (once per minute)
updateSecond = True # controls whether the second hanbd should update
while True: 
 b = time.gmtime(time.time()) # current GMT
 m = b.tm_min # remember the current minute
 s = b.tm_sec # rember the current second
 if update:
 #hour hand
 hour = turtle.Turtle()
 hour.left(90)
 hour.speed(100*SCALE)
 hour.pensize(10)
 hour.shape("blank")
 hour.right(((b.tm_hour + offset) % 12) * 30 + b.tm_min * 0.5 )
 hour.backward(30*SCALE)
 hour.forward(160*SCALE)

 #minute hand
 minute = turtle.Turtle()
 minute.speed(100)
 minute.shape("blank")
 minute.left(90)
 minute.pensize(6)
 minute.right((b.tm_min) * 6)
 minute.backward(30*SCALE)
 minute.forward(180*SCALE)

 update = False
 
 if updateSecond:
 #second hand
 second = turtle.Turtle()
 second.speed(100)
 second.shape("blank")
 second.color("red")
 second.left(90)
 second.pensize(3)
 second.right((b.tm_sec) * 6)
 second.backward(30*SCALE)
 second.forward(190*SCALE)
 updateSecond = False

 time.sleep(0.3)
 b = time.gmtime(time.time())
 new_min = b.tm_min
 new_sec = b.tm_sec

 if new_min != m:
 update = True
 hour.clear() # Clear out the drawing (if any)
 hour.reset()
 minute.clear()
 minute.reset()
 if new_sec != s:
 updateSecond = True
 second.clear()
 second.reset()

Originally published on Blogger

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.