Aug-09-2017, 02:33 AM
(This post was last modified: Aug-09-2017, 02:36 AM by AnonymousNobody.)
Here it is, forgive the majority being not in english.
from datetime import datetime import time import math #https://ssd.jpl.nasa.gov/horizons.cgi?s_time=1#top #https://ssd.jpl.nasa.gov/sbdb.cgi #WolframAlpha #Wikipedia import tkinter as tk root = tk.Tk() lbl = tk.Label(root, justify=tk.LEFT) text = tk.StringVar() lbl["textvariable"] = text text.set("Test") lbl.pack() moduloUnua = ['0'] moduloDua = ['0'] Praviganto1 = 0 Praviganto2 = 30.09 ĈuFaruMonaton = 0 Montru = 5 PliĜustigo = 0 Unikso = None Komencado = input('Ĉu vi volas komencigi la programon? ') if Komencado in ('Jes', 'jes', 'okej', 'Okej'): Loko = input('De kie vi volas vidi la dekuman tempon kaj tagon? ') if Loko in ('La Tero', 'la tero', 'ltero', 'LTero', 'Ltero', '399', '350'): JaroGregorie = 1792 MonatoGregorie = 9 TagoGregorie = 22 UTCa_horoj = 0 UTCa_minutoj = 0 UTCa_s = 0 UTCa_ms = 0 Enŝovo = 1 NeenŝovaLongo = 365 UnuaJararaLongo = 4 DuaJararaLongo = 128 MilisekundojPerTagumo = 86400000 PliĜustigo = math.floor(int(input('Kiom da ciferoj post la punkto de la milona tago vi volas? '))) # https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance Montru = input('Kiom da linioj vi volas rigardi? ') if Montru in ('5', 'kvin', 'Kvin', 'KVin', 'KVIn', 'KVIN'): Montru = 5 if Montru in ('1', 'unu', 'un', 'Unu', 'Un', 'UNu', 'UN', 'UNU'): Montru = 1 if Montru in ('2', 'du', 'Du', 'DU'): Montru = 2 if Montru in ('3', 'tri', 'Tri', 'TRi', 'TRI'): Montru = 3 if Montru == ('4', 'kvar', 'Kvar', 'KVar', 'KVAr', 'KVAR'): Montru = 4 if Montru == 1: Kio = input('Ĉu vi volas la kutima aŭ la nekutima linion? ') else: Longo = int(input('Ĉu vi volas rigardi la tempon kaj tagon se la tagumo estus malpli longa, pli longa, aŭ kutime longa? Estos (ankaŭ) kutime longa iel. ')) Temploko = int(input('Laŭ kio tempzono la tere vi volas vidi la dekuman tempon kaj tagon? ')) Loko = 'La Tero' KiamEnŝoviguJaron = 0 JarDekonaLongo = 40 DekaJardekonaLongo = 5 ĈuFaruMonaton = 1 MonataLongo = 30 FinaMonataLongo = 5 Praviganto1 = 27 if Loko in ('La Luno', 'la luno', 'lluno', 'LLuno', 'Lluno', '301'): Loko = input('Ĉu vi volas rigardi la tempon kaj tagon vere laŭ la luno? ') if Loko in ('Jes', 'jes', 'okej', 'Okej') or ('Jes', 'jes', 'okej', 'Okej') in Loko: JaroGregorie = 1792 MonatoGregorie = 9 TagoGregorie = 22 UTCa_horoj = 0 UTCa_minutoj = 0 UTCa_s = 0 UTCa_ms = 0 Enŝovo = 1 NeenŝovaLongo = 365 UnuaJararaLongo = 4 DuaJararaLongo = 128 MilisekundojPerTagumo = 86400000 KiamEnŝoviguJaron = 0 JarDekonaLongo = 40 DekaJardekonaLongo = 5 ĈuFaruMonaton = 1 MonataLongo = 30 FinaMonataLongo = 5 Temploko = int(input('Laŭ kio tempzono la tere vi volas vidi la dekuman tempon kaj tagon? ')) else: JaroGregorie = 1792 MonatoGregorie = 9 TagoGregorie = 1 UTCa_horoj = 6 UTCa_minutoj = 26 UTCa_s = 0#eble ne UTCa_ms = 0#eble ne Enŝovo = 1#? NeenŝovaLongo = 618#.4136286614534 170 de 411 UnuaJararaLongo = 0#? DuaJararaLongo = 0#? MilisekundojPerTagumo = 51028857.792 # 2% de vera tagumo Temploko = int(input('Laŭ kio tempzono la lune vi volas vidi la dekuman tempon kaj tagon? ')) PliĜustigo = math.floor(int(input('Kiom da ciferoj post la punkto de la centmilona tagumo vi volas? '))) Montru = input('Kiom da linioj vi volas rigardi? ') if Montru in ('5', 'kvin', 'Kvin', 'KVin', 'KVIn', 'KVIN'): Montru = 5 if Montru in ('1', 'unu', 'un', 'Unu', 'Un', 'UNu', 'UN', 'UNU'): Montru = 1 if Montru in ('2', 'du', 'Du', 'DU'): Montru = 2 if Montru in ('3', 'tri', 'Tri', 'TRi', 'TRI'): Montru = 3 if Montru == ('4', 'kvar', 'Kvar', 'KVar', 'KVAr', 'KVAR'): Montru = 4 if Montru == 1: Kio = input('Ĉu vi volas la kutima aŭ la nekutima linion? ') else: Longo = int(input('Ĉu vi volas rigardi la tempon kaj tagon se la tagumo estus malpli longa, pli longa, aŭ kutime longa? ')) Loko = 'La Luno' if Loko in ('Marso', 'marso', '499', '450'): JaroGregorie = 1956 MonatoGregorie = 4 TagoGregorie = 26 UTCa_horoj = 20 UTCa_minutoj = 8 UTCa_s = 46 UTCa_ms = 0 Enŝovo = -1 NeenŝovaLongo = 669 UnuaJararaLongo = 5 moduloUnua = "'1', '3'" # enŝovigas la jaron DuaJararaLongo = 125 moduloDua = "'0'" # enŝovigas la jaron MilisekundojPerTagumo = 86400000 PliĜustigo = math.floor(int(input('Kiom da ciferoj post la punkto de la centmilona tagumo vi volas? '))) Montru = input('Kiom da linioj vi volas rigardi? ') if Montru in ('5', 'kvin', 'Kvin', 'KVin', 'KVIn', 'KVIN'): Montru = 5 if Montru in ('1', 'unu', 'un', 'Unu', 'Un', 'UN', 'UNu', 'UNU'): Montru = 1 if Montru in ('2', 'du', 'Du', 'DU'): Montru = 2 if Montru in ('3', 'tri', 'Tri', 'TRi', 'TRI'): Montru = 3 if Montru == ('4', 'kvar', 'Kvar', 'KVar', 'KVAr', 'KVAR'): Montru = 4 if Montru == 1: Kio = input('Ĉu vi volas la kutima aŭ la nekutima linion? ') else: Longo = int(input('Ĉu vi volas rigardi la tempon kaj tagon se la tagumo estus malpli longa, pli longa, aŭ kutime longa? Estos (ankaŭ) kutime longa iel. ')) Temploko = int(input('Laŭ kio tempzono marse vi volas vidi la dekuman tempon kaj tagon? ')) Loko = 'Marso' KiamEnŝoviguJaron = 0 JarDekonaLongo = 70 DekaJardekonaLongo = 35 if UnuaJararaLongo > DuaJararaLongo: UnuaJararaLongo, DuaJararaLongo = DuaJararaLongo, UnuaJararaLongo if DuaJararaLongo % UnuaJararaLongo == 0: PlejMalsupraKomunaOblo = DuaJararaLongo else: PlejMalsupraKomunaOblo = DuaJararaLongo + 1 AlmenaŭĈiam = 1 while True: if PlejMalsupraKomunaOblo % UnuaJararaLongo == PlejMalsupraKomunaOblo % DuaJararaLongo == 0: break PlejMalsupraKomunaOblo += 1 EnŝovaLongo = Enŝovo + NeenŝovaLongo TagumojPerUnuaJararo = Enŝovo + UnuaJararaLongo * NeenŝovaLongo TagumojPerDuaJararo = DuaJararaLongo / UnuaJararaLongo * TagumojPerUnuaJararo - Enŝovo EpoĥoGregorie = datetime(JaroGregorie, MonatoGregorie, TagoGregorie) UniksoGregorie = datetime(1970, 1, 1) Intero = UniksoGregorie - EpoĥoGregorie TagojInterEpoĥoKajUnikso = Intero.days Minuss = (UTCa_horoj + UTCa_minutoj + UTCa_s + UTCa_ms) * 1000 msInterEpoĥoKajUnikso = TagojInterEpoĥoKajUnikso * 86400000 - Minuss TagumojInterEpoĥoKajUnikso = msInterEpoĥoKajUnikso / MilisekundojPerTagumo def LaTagumero(Komencado, Unikso, Praviganto2, MilisekundojPerTagumo, TagumojInterEpoĥoKajUnikso, TagumojPerUnuaJararo, TagumojPerDuaJararo, PlejMalsupraKomunaOblo, EnŝovaLongo, NeenŝovaLongo, KiamEnŝoviguJaron, Praviganto1, JarDekonaLongo, PliĜustigo, DekaJardekonaLongo): global text KomplementajTagoj = 5 if Unikso != None: Dormo = 31 else: Unikso = time.time() * 1000 - Praviganto2 Tagoj = Unikso / MilisekundojPerTagumo + TagumojInterEpoĥoKajUnikso - Praviganto1 + Temploko * .1 AntaŭUnuaKielero = Tagoj / TagumojPerUnuaJararo UnuaKielero = math.floor(AntaŭUnuaKielero) AntaŭDuaKielero = (AntaŭUnuaKielero - UnuaKielero) / TagumojPerDuaJararo * TagumojPerUnuaJararo DuaKielero = math.floor(AntaŭUnuaKielero) JarojEnŝovaj = DuaKielero - UnuaKielero JarojNeenŝovaj = PlejMalsupraKomunaOblo - JarojEnŝovaj AveraĝaJaro = (JarojEnŝovaj * EnŝovaLongo + JarojNeenŝovaj * NeenŝovaLongo) / PlejMalsupraKomunaOblo D_1 = Tagoj / AveraĝaJaro if D_1 < 0: Jareciganto = -1 else: Jareciganto = 1 Jaro = math.floor(D_1) + Jareciganto D_3 = D_1 - Jaro + Jareciganto JaroDaDuaKielero = str(Jaro % DuaKielero) JaroDaUnuaKielero = str(Jaro % UnuaKielero) ĈuEnŝovo = 0 if KiamEnŝoviguJaron == -1: # se aŭ unua aŭ dua veras («OR») if JaroDaDuaKielero not in (moduloDua): KielLongasLaJaro = NeenŝovaLongo if JaroDaUnuaKielero not in (moduloUnua): KielLongasLaJaro = NeenŝovaLongo if JaroDaDuaKielero in (moduloDua): KielLongasLaJaro = EnŝovaLongo ĈuEnŝovo = 1 if JaroDaUnuaKielero in (moduloUnua): KielLongasLaJaro = EnŝovaLongo ĈuEnŝovo = 1 Enŝovo = ĈuEnŝovo * EnŝovaLongo if KiamEnŝoviguJaron == 0: # se unu el du veras («XOR») if JaroDaDuaKielero in (moduloDua): if JaroDaUnuaKielero not in (moduloUnua): KielLongasLaJaro = EnŝovaLongo ĈuEnŝovo = 1 if JaroDaDuaKielero in (moduloDua): if JaroDaUnuaKielero in (moduloUnua): KielLongasLaJaro = NeenŝovaLongo if JaroDaUnuaKielero in (moduloUnua): if JaroDaDuaKielero not in (moduloDua): KielLongasLaJaro = EnŝovaLongo ĈuEnŝovo = 1 if JaroDaUnuaKielero not in (moduloUnua): if JaroDaDuaKielero not in (moduloDua): KielLongasLaJaro = NeenŝovaLongo Enŝovo = ĈuEnŝovo * EnŝovaLongo # se la unua el du, aŭ ambaŭ el du, veras # se la duua el du, aŭ ambaŭ el du, veras # se ambaŭ el du, aŭ nul el du, veras LaTagumoj = D_3 * KielLongasLaJaro - Praviganto1 D_4 = LaTagumoj / JarDekonaLongo + 1 JarDekono = math.floor(D_4) D_5 = D_4 - JarDekono if JarDekono < 10: D_6 = D_5 * JarDekonaLongo if JarDekono > 9: D_6 = D_5 * (DekaJardekonaLongo + Enŝovo) TagoDeLaJardekono = math.floor(D_6) ATagDekono = (D_6 - TagoDeLaJardekono) * 10 TagDekono = math.floor(ATagDekono) TagMilono = (ATagDekono - TagDekono) * 100 if PliĜustigo < 1: TagMilono = '{:02.0f}'.format(math.floor(TagMilono)) else: PliĜustigon = '0{}.{}'.format((PliĜustigo + 3), PliĜustigo) TagMilono = '{:{}f}'.format(TagMilono, PliĜustigon) TagMilono = str(TagMilono).replace('.', ',') if TagoDeLaJardekono == 0: if JarDekono > 1: JarDekono -= 1 TagoDeLaJardekono = JarDekonaLongo if JarDekono == 1: Jaro -= 1 JarDekono = 10 if KiamEnŝoviguJaron == 0: # se unu el du veras («XOR») if JaroDaDuaKielero in (moduloDua): if JaroDaUnuaKielero not in (moduloUnua): KielLongasLaJaro = EnŝovaLongo ĈuEnŝovo = 1 if JaroDaDuaKielero in (moduloDua): if JaroDaUnuaKielero in (moduloUnua): KielLongasLaJaro = NeenŝovaLongo if JaroDaUnuaKielero in (moduloUnua): if JaroDaDuaKielero not in (moduloDua): KielLongasLaJaro = EnŝovaLongo ĈuEnŝovo = 1 if JaroDaUnuaKielero not in (moduloUnua): if JaroDaDuaKielero not in (moduloDua): KielLongasLaJaro = NeenŝovaLongo Enŝovo = ĈuEnŝovo * EnŝovaLongo # se la unua el du, aŭ ambaŭ el du, veras # se la duua el du, aŭ ambaŭ el du, veras # se ambaŭ el du, aŭ nul el du, veras TagoDeLaJardekono = DekaJardekonaLongo + Enŝovo if JarDekono == 1: JarDekonoj = 'Unuembro' elif JarDekono == 2: JarDekonoj = 'Duembro' elif JarDekono == 3: JarDekonoj = 'Triembro' elif JarDekono == 4: JarDekonoj = 'Kvarembro' elif JarDekono == 5: JarDekonoj = 'Kvinembro' elif JarDekono == 6: JarDekonoj = 'Sesembro' elif JarDekono == 7: JarDekonoj = 'Sepembro' elif JarDekono == 8: JarDekonoj = 'Okembro' elif JarDekono == 9: JarDekonoj = 'Naŭembro' else: JarDekonoj = 'Dekembro' if ĈuEnŝovo >= 1: KomplementajTagoj += Enŝovo if JarDekono < 10: if math.floor(LaTagumoj) % 10 == 0: TagoDeTagDeko = 'Dekdo' if math.floor(LaTagumoj) % 10 == 1: TagoDeTagDeko = 'Unudo' if math.floor(LaTagumoj) % 10 == 2: TagoDeTagDeko = 'Dudo' if math.floor(LaTagumoj) % 10 == 3: TagoDeTagDeko = 'Trido' if math.floor(LaTagumoj) % 10 == 4: TagoDeTagDeko = 'Kvardo' if math.floor(LaTagumoj) % 10 == 5: TagoDeTagDeko = 'Kvindo' if math.floor(LaTagumoj) % 10 == 6: TagoDeTagDeko = 'Sesdo' if math.floor(LaTagumoj) % 10 == 7: TagoDeTagDeko = 'Sepdo' if math.floor(LaTagumoj) % 10 == 8: TagoDeTagDeko = 'Okdo' if math.floor(LaTagumoj) % 10 == 9: TagoDeTagDeko = 'Naŭdo' else: if TagoDeLaJardekono < (DekaJardekonaLongo - KomplementajTagoj): if math.floor(LaTagumoj) % 10 == 0: TagoDeTagDeko = 'Dekdo' if math.floor(LaTagumoj) % 10 == 1: TagoDeTagDeko = 'Unudo' if math.floor(LaTagumoj) % 10 == 2: TagoDeTagDeko = 'Dudo' if math.floor(LaTagumoj) % 10 == 3: TagoDeTagDeko = 'Trido' if math.floor(LaTagumoj) % 10 == 4: TagoDeTagDeko = 'Kvardo' if math.floor(LaTagumoj) % 10 == 5: TagoDeTagDeko = 'Kvindo' if math.floor(LaTagumoj) % 10 == 6: TagoDeTagDeko = 'Sesdo' if math.floor(LaTagumoj) % 10 == 7: TagoDeTagDeko = 'Sepdo' if math.floor(LaTagumoj) % 10 == 8: TagoDeTagDeko = 'Okdo' if math.floor(LaTagumoj) % 10 == 9: TagoDeTagDeko = 'Naŭdo' if TagoDeLaJardekono < (DekaJardekonaLongo - KomplementajTagoj + 1): TagoDeTagDeko = 'Festo de Virto' if TagoDeLaJardekono < (DekaJardekonaLongo - KomplementajTagoj + 2): TagoDeTagDeko = 'Festo de Genio' if TagoDeLaJardekono < (DekaJardekonaLongo - KomplementajTagoj + 3): TagoDeTagDeko = 'Festo de Laboro' if TagoDeLaJardekono < (DekaJardekonaLongo - KomplementajTagoj + 4): TagoDeTagDeko = 'Festo de Opinio' if TagoDeLaJardekono < (DekaJardekonaLongo - KomplementajTagoj + 5): TagoDeTagDeko = 'Festo de Rekompenco' if TagoDeLaJardekono < (DekaJardekonaLongo - KomplementajTagoj + 6): TagoDeTagDeko = 'Festo de Libereco/Revolucio' if Longo == 1 or Longo == -1: PliLonga = JarDekonaLongo + 10 * Longo if (math.floor(PliLonga / 10)) * 10 >= (JarDekonaLongo + 5): PliLonga = (math.ceil(PliLonga / 10)) * 10 if ĈuFaruMonaton != 0: F_4 = LaTagumoj / MonataLongo + 1 Monato = math.floor(F_4) F_5 = F_4 - Monato if Monato < 13: F_6 = F_5 * MonataLongo else: F_6 = F_5 * (FinaMonataLongo + Enŝovo) M_Tago = math.floor(F_6) if M_Tago == 0: if Monato > 1: Monato -= 1 M_Tago = MonataLongo if Monato == 1: Jaro -= 1 Monato = 13 if KiamEnŝoviguJaron == 0: # se unu el du veras («XOR») if JaroDaDuaKielero in (moduloDua): if JaroDaUnuaKielero not in (moduloUnua): KielLongasLaJaro = EnŝovaLongo ĈuEnŝovo = 1 if JaroDaDuaKielero in (moduloDua): if JaroDaUnuaKielero in (moduloUnua): KielLongasLaJaro = NeenŝovaLongo if JaroDaUnuaKielero in (moduloUnua): if JaroDaDuaKielero not in (moduloDua): KielLongasLaJaro = EnŝovaLongo ĈuEnŝovo = 1 if JaroDaUnuaKielero not in (moduloUnua): if JaroDaDuaKielero not in (moduloDua): KielLongasLaJaro = NeenŝovaLongo Enŝovo = ĈuEnŝovo * EnŝovaLongo # se la unua el du, aŭ ambaŭ el du, veras # se la duua el du, aŭ ambaŭ el du, veras # se ambaŭ el du, aŭ nul el du, veras M_Tago = FinaMonataLongo + Enŝovo if Monato == 1: Monatoj = 'Vendemiero' elif Monato == 2: Monatoj = 'Brumero' elif Monato == 3: Monatoj = 'Frimero' elif Monato == 4: Monatoj = 'Nivozoo' elif Monato == 5: Monatoj = 'Pluviozo' elif Monato == 6: Monatoj = 'Ventozo' elif Monato == 7: Monatoj = 'Ĝerminalo' elif Monato == 8: Monatoj = 'Florealo' elif Monato == 9: Monatoj = 'Prerialo' elif Monato == 10: Monatoj = 'Mesidoro' elif Monato == 11: Monatoj = 'Termidoro' elif Monato == 12: Monatoj = 'Fruktidoro' else: Monatoj = 'Komplementaj Tagoj' Jaro = '{:+d}'.format(Jaro) Templokon = '{:+d}'.format(Temploko) NulaVico = (' {}, sed ankaŭ {}'.format(Loko, Templokon)) UnuaVico = (' Jar-dekona Kalendaro: {}, {} {} {} je {},{}'.format(TagoDeTagDeko, TagoDeLaJardekono, JarDekonoj, Jaro, TagDekono, TagMilono)) DuaVico = 'Neniom' if -1 < Longo < 1: if ĈuFaruMonaton != 0: DuaVico = (' Jar-tridekona Kalendaro: {}, {} {} {} je {},{}'.format(TagoDeTagDeko, M_Tago, Monatoj, Jaro, TagDekono, TagMilono)) #else: #DuaVico = (' Jar-dekona Kalendaro Usonane: {}, {} {} {} je {},{},{}'.format(TagoDeTagDeko, TagoDeLaSemajno, JarDekonoj, Jaro, Horoj, Minutoj, Sekundoj)) if Longo == 1: if ĈuFaruMonaton != 0: DuaVico = (' Jar-dekona Kalendaro: {}, {} {} {} je {},{}'.format(TagoDeTagDeko, M_Tago, Monatoj, Jaro, AliTagDekono, AliTagMilono)) if Longo == -1: DuaVico = (' Jar-dekona Kalendaro: {}, {} {} {} je {},{}'.format(TagoDeTagDeko, M_Tago, Monatoj, Jaro, AliTagDekono, AliTagMilono)) if Montru == 4: Vortoj = '{}\n\n{}\n{}'.format(NulaVico, UnuaVico, DuaVico) if Montru == 5: Vortoj = '{}\n\n{}\n{}\n'.format(NulaVico, UnuaVico, DuaVico) if Montru == 3: Vortoj = '{}\n{}\n{}'.format(NulaVico, UnuaVico, DuaVico) if Montru == 2: Vortoj = '{}\n{}'.format(UnuaVico, DuaVico) if Montru == 1: if -2 < Kio < 2: Vortoj = '{}'.format(UnuaVico) else: Vortoj = '{}'.format(DuaVico) Dormo = int(30 - Unikso + time.time() * 1000 + Praviganto2) if Dormo < 0: Dormo = 0 if Dormo > 30: Dormo = 30 text.set(Vortoj) root.after(Dormo, LaTagumero, Komencado, Unikso, Praviganto2, MilisekundojPerTagumo, TagumojInterEpoĥoKajUnikso, TagumojPerUnuaJararo, TagumojPerDuaJararo, PlejMalsupraKomunaOblo, EnŝovaLongo, NeenŝovaLongo, KiamEnŝoviguJaron, Praviganto1, JarDekonaLongo, PliĜustigo, DekaJardekonaLongo) LaTagumero(Komencado, Unikso, Praviganto2, MilisekundojPerTagumo, TagumojInterEpoĥoKajUnikso, TagumojPerUnuaJararo, TagumojPerDuaJararo, PlejMalsupraKomunaOblo, EnŝovaLongo, NeenŝovaLongo, KiamEnŝoviguJaron, Praviganto1, JarDekonaLongo, PliĜustigo, DekaJardekonaLongo) root.mainloop()I know there are better ways to do the typo-proofing (and probably the other contents), but would like to change that later. It is meant to be a custom (with choices for predefined calendars) multilingual calendar creator eventually. Would kivy or pygame or pyglet be a better choice? I previously used autohotkey and not python for this, but it was very buggy.