wunderschönen guten abend!
ich habe heute nacht um halb 3 mein modul
fuzzy_clock
zu Ende gebracht.
das ist eine funktion, die die uhrzeit in umgangssprache als string zurückgibt.
bsp:
"Viertel nach Drei"
oder
"Um Eins"
oder
"Kurz vor Zwei"
auf die idee kam ich durch Muetze1 von developia.de, der auf seiner Homepage (www.muetze1.de) die komponente FuzzyClock für Delphi geschrieben hat. er selbst hatte die idee von seinem alten Atari 1040 übernommen.
und hier ist es nun:
http://der-olf.paebbels.net/python/fuzzy_clock.py
sprachverbesserungen bezüglich der uhrzeit nehme ich gerne an.
achso: es ist mir bekannt, dass die uhrzeiten in anderen teilen deutschlands andere namen haben.
ich komme aus nordhessen, und deswegen habe ich das modul auf meine umgangssprache zugeschnitten.
habt spaß!
mfg Olf
FuzzyClock
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Olf,
da gibts ja einige ifs weg zu optimieren:
Gruß
Dookie
da gibts ja einige ifs weg zu optimieren:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: cp1252 -*-
"""
Module: fuzzy_clock.py
Description: German Version,
rebuild of an VCL
component from
Muetze1 (http://www.muetze1.de)
Author: Florian "LizardKing" Löber
Date: 25.07.2004
Version: 1.0
Requires: Python2.3
"""
import time
def fuzzy_clock():
__time = time.localtime()
int_h = __time[3]
int_min = __time[4]
zeit = ["Zwölf", # 0 / 12
"Eins",
"Zwei",
"Drei",
"Vier",
"Fünf",
"Sechs",
"Sieben",
"Acht",
"Neun",
"Zehn",
"Elf"]
mitternacht = "Mitternacht"
viertel = "Viertel"
halb = "Halb "
kurz = "Kurz"
vor = " vor " # with 2 whitespaces
nach = " nach "
um = "Um "
dreiviertel = "Dreiviertel "
def minutes(hour):
""" a function to check
the minutes """
if hour == 0 and int_min == 0:
return mitternacht
if hour > 12: # das spart einige if's
hour -= 12
if int_min == 0:
return um + zeit[hour]
elif int_min == 1:
return kurz + nach + zeit[hour]
elif int_min <= 10:
return zeit[int_min] + nach + zeit[hour]
elif int_min < 14:
return zeit[15-int_min] + vor + viertel + nach + zeit[hour]
elif int_min == 14:
return kurz + vor + viertel + nach + zeit[hour]
elif int_min == 15:
return viertel + nach + zeit[hour]
elif int_min == 16:
return kurz + nach + viertel + nach + zeit[hour]
elif int_min < 20:
return zeit[int_min-15] + nach + viertel + nach + zeit[hour]
elif int_min < 29:
return zeit[30-int_min] + vor + halb + zeit[(hour + 1) % 12]
elif int_min == 29:
return kurz + vor + halb + zeit[(hour + 1) % 12]
elif int_min == 30:
return halb + zeit[(hour + 1) % 12]
elif int_min == 31:
return kurz + nach + halb + zeit[(hour + 1) % 12]
elif int_min < 41:
return zeit[int_min-30] + nach + halb + zeit[(hour + 1) % 12]
elif int_min < 44:
return zeit[45-int_min] + vor + dreiviertel + zeit[(hour + 1) % 12]
elif int_min == 44:
return kurz + vor + dreiviertel + zeit[(hour + 1) % 12]
elif int_min == 45:
return _3viertel + zeit[(hour + 1) % 12]
elif int_min == 46:
return kurz + nach + viertel + vor + zeit[(hour + 1) % 12]
elif int_min < 51:
return zeit[int_min-45] + nach + dreiviertel + zeit[(hour + 1) % 12]
elif int_min < 59:
return zeit[60-int_min] + vor + zeit[(hour + 1) % 12]
elif int_min == 59:
return kurz + vor + zeit[(hour + 1) % 12]
else:
# here error messages or so
pass
# call the function
_fuzzy_clock = minutes(int_h)
return _fuzzy_clock
# test it
if __name__ == "__main__":
f = fuzzy_clock()
print f
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
% ist module, also der ganzzahlige Rest einer Division.
Gruß
Dookie
Code: Alles auswählen
for i in xrange(13,25):
print i, i % 12
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Ich hab auch mal versucht ein paar if's wegzuoptimieren. Herausgekommen ist das:
Naja, es ist keine 1:1 Umsetzung von Olf's Script, vor allem fällt mir gerade auf, daß Um und Mitternacht fehlen , aber ich glaube es funktioniert.
UPDATE: Kleiner Bugfix: jetzt wird auch z.B. 7:12 richtig angezeigt
Gruß, mawe
Ich hab auch mal versucht ein paar if's wegzuoptimieren. Herausgekommen ist das:
Code: Alles auswählen
from time import localtime
viertel = ["Punkt","viertel","halb","dreiviertel","Punkt"]
stunde = ["Zwoelf","Eins","Zwei","Drei","Vier","Fuenf","Sechs","Sieben","Acht",
"Neun","Zehn","Elf","Zwoelf"]
pre = ""
def fuzzy(hour,min):
hour = hour%12
rest = min%15
mult = min/15
if mult > 0:
hour+=1
if rest == 0:
pre=""
elif rest == 1:
pre="kurz nach "
elif rest < 10:
pre = str(rest) + " nach "
elif rest < 14:
pre = str(15-rest) + " vor "
mult+=1
if mult == 1:
hour+=1
elif rest == 14:
pre = " kurz vor "
mult+=1
if mult == 1:
hour += 1
print "Es ist " + pre + viertel[mult] + " " + stunde[hour]
if __name__ == '__main__':
hour = localtime()[3]
minute = localtime()[4]
fuzzy(hour,minute)
UPDATE: Kleiner Bugfix: jetzt wird auch z.B. 7:12 richtig angezeigt
Gruß, mawe
Zuletzt geändert von mawe am Dienstag 27. Juli 2004, 07:31, insgesamt 1-mal geändert.
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
So ich hab mich auch nochmal dran versucht.
Gruß
Dookie
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
Modul: fuzzyclock2
Description: Beschreibung
Version: 0.1
Copyright: 2004 by Fritz Cizmarov fritz@sol.at
Created: 26. Jul. 2004
Last modified: 26. Jul. 2004
License: free
Requirements: Python2.3
Exports: Classes and Functions to export
"""
import time
class FuzzyClock(object):
__slots__ = ["the_time"]
format = "Es ist %s%s%s%s"
zahlen = ("Zwölf", "Eins", "Zwei", "Drei",
"Vier", "Fünf", "Sechs", "Sieben",
"Acht", "Neun", "Zehn", "Elf")
quartal = ("", "Viertel nach ", "Halb ", "Dreiviertel ")
minuten = "Minuten"
kurz = "kurz"
nach = " nach "
vor = " vor "
kurz_vor_nach = (1, 14, 16, 29, 31, 44, 46, 59)
mitternacht = "Mitternacht"
def __init__(self, the_time=None):
super(FuzzyClock, self).__init__()
if the_time is None:
self.the_time = time.localtime()
else:
self.the_time = the_time
def __str__(self):
stunde = self.the_time[3]
minute = self.the_time[4]
minuten = ""
vor_nach = ""
stunden = self.mitternacht
if (stunde, minute) != (0,0):
stunde %= 12
quartal = self.quartal[((minute+7) / 15) % 4]
tmp = minute % 15
if tmp == 0:
vor_nach = ""
elif tmp <= 7:
minuten = self.zahlen[tmp]+" "+self.minuten
vor_nach = self.nach
else:
minuten = self.zahlen[15-tmp]+" "+self.minuten
vor_nach = self.vor
if minute > 22:
stunde = (stunde+1) % 12
if minute in self.kurz_vor_nach:
minuten = self.kurz
stunden = self.zahlen[stunde]
return self.format % (minuten, vor_nach, quartal, stunden)
def __call__(self):
self.the_time = time.localtime()
return str(self)
if __name__ == "__main__":
import random
print FuzzyClock()
print "Und noch eine Zufallszeit zum testen:"
stunde = random.randint(0,23)
minute = random.randint(0,59)
print "%02i:%02i %s" % (stunde, minute, FuzzyClock((0,0,0,stunde,minute)))
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
hi.
mir war gestern abend ein wenig langweilig, deswegen hab ich einfach mal nen doppelklick auf die fuzzy clock gemacht.
und siehe da: bei deinem ersten versuch Dookie, hat sich ein fehler eingeschlichen.
um ca. 9 uhr oder 9.30 (kA so genau) war es 1 uhr
hui, dein zweiter versuch sieht aber auch nicht schlecht aus
(habs aber nicht getestet)
mfg Olf.
mir war gestern abend ein wenig langweilig, deswegen hab ich einfach mal nen doppelklick auf die fuzzy clock gemacht.
und siehe da: bei deinem ersten versuch Dookie, hat sich ein fehler eingeschlichen.
um ca. 9 uhr oder 9.30 (kA so genau) war es 1 uhr
hui, dein zweiter versuch sieht aber auch nicht schlecht aus
(habs aber nicht getestet)
mfg Olf.