Python Tabellenfunktion definieren

Neue Frage »

Auf diesen Beitrag antworten »
Dr.Java Python Tabellenfunktion definieren

Hallo. Ich habe wieder eine Frage zu Python.

Ich habe jetzt ein Programm erstellt zur Berechnung des Osterdatums bei beliebiger Jahresangabe ,basierend auf der ergänzten Osterformel.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
def easter(year):
    K = year//100
    M = 15 + (3*K+3)//4 - (8*K + 13)//25
    S = 2 - (3*K+3)//4
    A = year%19
    D = (19*A+M)%30
    R = (D + A//11)//29
    OG= 21 + D - R
    SZ= 7 - (year+year//4+S)%7
    OE= 7 - (OG - SZ)%7
    OS= OG + OE
    if OS>31:
        return("april " +str(OS-31).zfill(2))
    else:
        return("march " +str(OS))


Ich würde jetzt gerne noch eine Tabelle erstellen die für ein beliebiges Jahresintervall
das aktuelle Jahr und das entsprechende Datum von Ostern ausgibt zu erstellen.
Nur wie würde ich so eine allgemeine Tabelle in Python erstellen?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
def printeaster(first, final):
    K = year//100
    M = 15 + (3*K+3)//4 - (8*K + 13)//25
    S = 2 - (3*K+3)//4
    A = year%19
    D = (19*A+M)%30
    R = (D + A//11)//29
    OG= 21 + D - R
    SZ= 7 - (year+year//4+S)%7
    OE= 7 - (OG - SZ)%7
    OS= OG + OE
    if OS>31:
        return("april " +str(OS-31).zfill(2))
    else:
        return("march " +str(OS))
    print('year  day')
    print('-'*12)
    print('{0:.1f}   {1:2d}'.format(first, date ))

Das wäre mein Ansatz soweit, wie kann ich das noch modifizieren? Wäre dankbar für Reckmeldungen.

lg
 
Auf diesen Beitrag antworten »
eulerscheZahl

year ist nicht definiert und die verwendest first und last nicht.
So läuft es zumindest schonmal:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
def printeaster(first, final):
    for year in range(first, final + 1):
        K = year//100
        M = 15 + (3*K+3)//4 - (8*K + 13)//25
        S = 2 - (3*K+3)//4
        A = year%19
        D = (19*A+M)%30
        R = (D + A//11)//29
        OG= 21 + D - R
        SZ= 7 - (year+year//4+S)%7
        OE= 7 - (OG - SZ)%7
        OS= OG + OE
        if OS>31:
            print(str(year) + ": april " +str(OS-31).zfill(2))
        else:
            print(str(year) + ": march " +str(OS))

Ich weiß immer noch nicht genau, wie deine Tabelle aussehen soll.
Auf diesen Beitrag antworten »
Dr.Java

Pardon , ich dachte die letzten beiden Zeilen würden als Hinweis ausreichen.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
 year  day
------------
2016   march 27

2017  april 16

2018  april 01


So eine Tabelle in etwa,dann für beliebige Start und Endwerte. Danke dir auf jeden Fall ,so was in der Richtung habe ich gesucht.

lg
Auf diesen Beitrag antworten »
eulerscheZahl

Oh, das habe ich direkt rausgelöscht, weil es nach dem return stand und deshalb toter Code war.
Dann schieben wir das eben noch nach oben:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
def printeaster(first, final):
    print('year  day')
    print('-'*12)
    for year in range(first, final + 1):
        K = year//100
        M = 15 + (3*K+3)//4 - (8*K + 13)//25
        S = 2 - (3*K+3)//4
        A = year%19
        D = (19*A+M)%30
        R = (D + A//11)//29
        OG= 21 + D - R
        SZ= 7 - (year+year//4+S)%7
        OE= 7 - (OG - SZ)%7
        OS= OG + OE
        if OS>31:
            print(str(year) + ": april " +str(OS-31).zfill(2))
        else:
            print(str(year) + ": march " +str(OS))

Ausgabe:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
year  day
------------
2000: april 23
2001: april 15
2002: march 31
2003: april 20
2004: april 11
2005: march 27
2006: april 16
2007: april 08
2008: march 23
2009: april 12
2010: april 04
2011: april 24
2012: april 08
2013: march 31
2014: april 20
2015: april 05
2016: march 27
 
Auf diesen Beitrag antworten »
Dr.Java

Ah so geht das also,dachte schon etwas in diese Richtung. Ich kann mich nur wiederholen und sagen vielen lieben Dank.

lg
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »