366
Ereignisgesteuerte Programme
Kapitel
13
from turtle import *
from mytools import jump
from time import clock
...
def tick():
print("{0:8.2f}".format(clock()))
sekundenzeiger.right(6)
screen.ontimer(tick, 1000)
Ich habe hier in der Formatmarke mit
:8.2f
das Format festgelegt: eine
Gleitkommazahl (float), insgesamt 8 Zeichen breit mit 2 Nachkommastellen.
Wenn ich die Uhr mit dieser Ergänzung laufen lasse, erhalte ich im IPI-
Shell-Fenster etwa folgende Ausgabe:
>>> 229.63
230.69
231.76
232.82
...
Leider, die Sekunde unserer schönen Uhr dauert etwas zu lange! Erstens,
weil die Anweisungen in
tick()
etwas Zeit brauchen, und zweitens, weil
ontimer()
nicht besonders genau arbeitet. Jetzt hat aber jeder Computer
eine ziemlich genaue Uhr eingebaut. Die können wir benutzen, um unsere
Uhr zu steuern.
Datum und Uhrzeit ermitteln
Python hat einige Module, die mit Datum und Zeit zu tun haben. Das Mo-
dul
time
ist ein solches. Für unsere jetzigen Zwecke ist aber das Modul
datetime
besser geeignet. Dieses Modul enthält eine Klasse, die ebenfalls
datetime
heißt. Diese Klasse (!) hat eine Methode
now()
, mit der sie ein
datetime
-Objekt erzeugen kann, das die augenblicklichen Werte von Da-
tum und Zeit enthält.
>
Mach mit!
>>> from datetime import datetime
>>> jetzt = datetime.now()
>>> jetzt
datetime.datetime(2009, 8, 18, 14, 53, 54, 905000)
367
Datum und Uhrzeit ermitteln
jetzt
verweist somit auf ein
datetime
-Objekt mit folgenden Eigenschaf-
ten:
>>> jetzt.year
2009
>>> jetzt.month
8
>>> jetzt.day
18
>>> jetzt.hour
14
>>> jetzt.minute
53
>>> jetzt.second
54
>>> jetzt.microsecond
905000
Außerdem haben
datetime
-Objekte verschiedene Methoden, von denen
dich vielleicht folgende interessiert:
>>> jetzt.weekday()
1
Sie gibt eine Zahl im Bereich 0 … 6 zurück, die den Wochentag bezeichnet.
Dabei bedeutet 0 Montag, 1 Dienstag usw. bis 6 Sonntag.
Damit können wir bei jedem Aufruf von
tick()
genau feststellen, wie spät
es ist, davon den Sekundenanteil ermitteln und für die Einstellung des Se-
kundenzeigers nutzen. (Beachte: Eine Mikrosekunde ist eine Millionstelse-
kunde). Dabei ist es durchaus möglich, mehrmals pro Sekunde die Lage des
Sekundenzeigers anzupassen, um eine gleichmäßigere Zeigerbewegung zu
erreichen:
from turtle import *
from mytools import jump
from datetime import datetime
def tick():
jetzt = datetime.now()
sekunden=jetzt.second + jetzt.microsecond * 0.000001
print("{0:8.2f}".format(sekunden))
sekundenzeiger.setheading(6*sekunden)
screen.ontimer(tick, 200)

Get Python für Kids now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.