Python :: Aufgabe #159 :: Lösung #1

5 Lösungen Lösungen öffentlich
#159

Ist Freitag der 13. ein Unglücks- oder Glückstag?

Anfänger - Python von hollst - 26.06.2017 um 13:14 Uhr
Wir betrachten den Gregorianischen Kalender mit den üblichen 12 Monaten und Schaltjahren.

Schaltjahr ist, wenn die Jahreszahl durch 4 teilbar ist, mit Ausnahme der Jahre, die durch 100,
jedoch nicht durch 400 teilbar sind. Im Schaltjahr hat der Februar 29 Tage.

Unsere Zeitrechnung beginne mit dem 1. Januar 00.

Frage: Welcher Wochentag fällt

a) am häufigsten auf einen 13. des Monats und
b) welcher bzw. welche am wenigsten.
#1
vote_ok
von SamYoshihara (120 Punkte) - 17.07.2017 um 02:40 Uhr
Quellcode ausblenden Python-Code
# Wochentag des 13ten von Sam Yoshihara
#  Die "# print" können zur Kontrolle zugeschaltet werden.

mo, di, mi, do, fr, sa, so=0, 0, 0, 0, 0, 0, 0
a=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
b=[31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
c=("Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez")
d=("Fr", "Sa", "So", "Mo", "Di", "Mi", "Do")
q, t, u, v=0, 0, 0, 0

print ("Gib das heutige Datum ein. (dd mm yyyy)")
print ()
while True:
    tag = int(input ("Tag dd    "))
    if 0 < tag < 32:
        break
    else:
        print ("Tag von 01 bis 31. Keine unmöglichen Daten!")
while True:
    monat = int(input ("Monat mm  "))
    if 0 < monat < 13:
        break
    else:
        print ("Monat von 01 bis 12. Keine unmöglichen Daten!")
jahr = int(input ("Jahr yyyy "))

while u < jahr:
    if u % 4 != 0 or u % 100 == 0 and not u % 400 == 0: 
        for i in range(12):
            r = q + 13
            q += a[i]
            s = r % 7
            if s == 0:
                fr += 1
            elif s == 1:
                sa += 1
            elif s == 2:
                so += 1
            elif s == 3:
                mo += 1
            elif s == 4:
                di += 1
            elif s == 5:
                mi += 1
            elif s == 6:
                do += 1

        t += 365
#        print ("Jahr", u, " Tage", t)   # Vorsicht, printet alle nicht Schaltjahr!
        u += 1
        
    else:
        for i in range(12):
            r = q + 13
            q += b[i]
            s = r % 7
            if s == 0:
                fr += 1
            elif s == 1:
                sa += 1
            elif s == 2:
                so += 1
            elif s == 3:
                mo += 1
            elif s == 4:
                di += 1
            elif s == 5:
                mi += 1
            elif s == 6:
                do += 1

        t += 366
        v += 1
#        print ("Jahr", u, " Tage", t, " Schaltjahre", v)
        u += 1
        
#print ()
#print (t, "Tage bis Ende", (u-1))
#print ("inkl.", v, "Schalttage")


if u == jahr:
    if u % 4 != 0 or u % 100 == 0 and not u % 400 == 0: 
        for i in range(0, monat-1):
            r = q + 13
            q += a[i]
            s = r % 7
            t += a[i]
#            print ("==", d[s], "13", c[i], "ist Tag", r)
#            print ("  ", a[i], c[i], u, "ist Tag", q)
            if s == 0:
                fr += 1
            elif s == 1:
                sa += 1
            elif s == 2:
                so += 1
            elif s == 3:
                mo += 1
            elif s == 4:
                di += 1
            elif s == 5:
                mi += 1
            elif s == 6:
                do += 1
                    
    else:
        for i in range(0, monat-1):
            r = q + 13
            q += b[i]
            s = r % 7
            t += b[i]
#            print ("++", d[s], "13", c[i], "ist Tag", r)
#            print ("  ", b[i], c[i], u, "ist Tag", q)
            if s == 0:
                fr += 1
            elif s == 1:
                sa += 1
            elif s == 2:
                so += 1
            elif s == 3:
                mo += 1
            elif s == 4:
                di += 1
            elif s == 5:
                mi += 1
            elif s == 6:
                do += 1
        if monat > 2 or monat == 2 and tag == 29:
            v += 1

    if tag > 12:
        r = q + 13
        s = r % 7
        if s == 0:
            fr += 1
        elif s == 1:
            sa += 1
        elif s == 2:
            so += 1
        elif s == 3:
            mo += 1
        elif s == 4:
            di += 1
        elif s == 5:
            mi += 1
        elif s == 6:
            do += 1
    
    t += tag
    w = t % 7

print ()
print (t, "Tage bis heute,", d[w], tag, c[monat-1], u)
print ("inkl.", v, "Schalttage")
print ()
print ("13ter ist am", "Mo =", mo)
print ("             Di =", di)
print ("             Mi =", mi)
print ("             Do =", do)
print ("             Fr =", fr)
print ("             Sa =", sa)
print ("             So =", so, "mal.")

# Wenn man eine grosse Jahreszahl eingibt, zB. 100'000, erkennt man, dass
# Freitag der häufigste Tag ist, vor So/Mi, Mo/Di und Do/Sa.

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben