Python :: Aufgabe #21

4 Lösungen Lösungen öffentlich

Anzahl Freitag, der 13te über bestimmten Zeitraum

Anfänger - Python von pocki - 29.12.2012 um 19:56 Uhr
Schreibe ein Programm welches 2 verschiedene Datum einliest und berechne die Anzahl wie oft in diesem Zeitraum der 13te eines Monats auf einen Freitag fiel und gib diese aus.

Konsolenausgabe:


Startdatum: 01.01.2009
Enddatum: 31.12.2009
13.02.2009
13.03.2009
13.11.2009
Summe: 3

Lösungen:

vote_ok
von jigga (4260 Punkte) - 20.06.2015 um 12:50 Uhr
Quellcode ausblenden Python-Code
import datetime, sys

anfang = input("Startdatum: ").split('.')[::-1]
ende = input("Enddatum: ").split('.')[::-1]
print()

anzahl = 0

for i in range(len(anfang)):
    anfang[i] = int(anfang[i])

for i in range(len(ende)):
    ende[i] = int(ende[i])

try:
    startdatum = datetime.date(anfang[0],anfang[1],anfang[2])
    enddatum = datetime.date(ende[0],ende[1],ende[2])

except:
    print("Irgendwas stimmt mit der/dem Eingabe/Datum nicht!")
    sys.exit(0)

if startdatum > enddatum:
    print("Startdatum groesser Enddatum!")
    sys.exit(0)

if anfang[2] > 13:
    anfang[2] = 13
    anfang[1] += 1

while True:
    if datetime.date(anfang[0],anfang[1],13).weekday() == 4:
        if len(str(anfang[1])) == 1:
            print("13.0" + str(anfang[1]) + "." + str(anfang[0]))        

        else:
            print("13." + str(anfang[1]) + "." + str(anfang[0]))

        anzahl += 1
        
    if anfang[1] == 12:
        anfang[1] = 1
        anfang[0] += 1

    else:
        anfang[1] += 1

    startdatum = datetime.date(anfang[0],anfang[1],anfang[2])

    if startdatum > enddatum:
        break

print()
print("Summe:", anzahl)
vote_ok
von Kotgreifer (1100 Punkte) - 14.01.2020 um 16:04 Uhr
Quellcode ausblenden Python-Code
from datetime import date
mydate = date(2020, 1, 15).weekday()
print(mydate)

print("Format Regel: \nDatum in yyyy-mm-dd ! \nNicht 01 schreiben nur 1 !\n")


xStart=[]
xEnde= []

for item in input("Startdatum: ").split("-"):
    xStart.append(int(item))

for item in input("Endedatum: ").split("-"):
    xEnde.append(int(item))

monat=0

anzMonat = xEnde[1]-xStart[1]
if xStart[2] <= 13:
    anzMonat += 1
else:
    monat=1
if xEnde[2] <= 13:
    anzMonat -= 1
if xStart[0] != xEnde[0]:
    anzMonat += (xEnde[0]-xStart[0])*12

erg = []
monat+= xStart[1]
jahr=xStart[0]
for i in range(0, anzMonat):
    if monat>12: 
        monat=1 
        jahr+=1
    datum = date(jahr, monat, 13)
    monat+=1
    if datum.weekday()==4: erg.append(datum.isoformat())


print(erg)
vote_ok
von eisheiliger (3750 Punkte) - 25.03.2021 um 20:21 Uhr
Quellcode ausblenden Python-Code

"""
#21: Anzahl Freitag, der 13te über bestimmten Zeitraum
Schreibe ein Programm welches 2 verschiedene Datum einliest und berechne die Anzahl wie oft in
diesem Zeitraum der 13te eines Monats auf einen Freitag fiel und gib diese aus.
"""
import datetime


def freitag13(beg, end):
    anz = 0
    datum = (beg + datetime.timedelta(days=x) for x in range(0, (end - beg).days))
    print("Startdatum:", beg.strftime("%d.%m.%Y"))
    print("Endedatum :", end.strftime("%d.%m.%Y"))
    for zeitstrahl in datum:
        einzel = zeitstrahl.strftime("%a %d.%m.%Y")
        if einzel[0:6] == "Fri 13":
            print(einzel)
            anz += 1
    print("Summe:", anz)
            
            
def main():
    freitag13(datetime.datetime(1900, 1, 1), datetime.datetime(2100, 12, 31))


if __name__ == '__main__':
    main()



vote_ok
von PythonLui (400 Punkte) - 19.04.2021 um 09:29 Uhr
Quellcode ausblenden Python-Code
import datetime

# Eingabe 
start = input("Startdatum: ")
ende = input("Enddatum: ")

# Liste erstellen 
start_liste = start.rsplit(".")
ende_liste = ende.rsplit(".")

# Liste in in Integer Liste wandeln
for i in range(len(start_liste)):
    start_liste[i] = int(start_liste[i])
for i in range(len(ende_liste)):
    ende_liste[i] = int(ende_liste[i])

# Überprüfen ob Ende vor oder nach dem 13. liegt
start_liste[0] = 13
if ende_liste[0] >= 13:
    ende_liste[0] = 13
    ende_liste[1] += 1


summe = 0

while True:
    year_difference = ende_liste[2] - start_liste[2]
    check_month = start_liste
    # Wenn Jahreswechsel vorhanden ist
    if year_difference > 0:
        # Durchläuft ein ganzes Jahr
        for month in range(start_liste[1], 12 + 1):
            check_month[1] = month
            aktuelles_pruef_datum = datetime.date(check_month[2], check_month[1], check_month[0])
            umwandlung = datetime.date.timetuple(aktuelles_pruef_datum)
            # Überprüfen ob der 13 ein Freitag ist
            if umwandlung.tm_wday == 4:
                print(f"{check_month[0]}.{check_month[1]}.{check_month[2]}")
                summe += 1
        start_liste[1] = 1
        start_liste[2] += 1
    # Wenn kein Jahreswechsle vorhanden ist
    else:
        for month in range(start_liste[1], ende_liste[1]):

            check_month[1] = month
            aktuelles_pruef_datum = datetime.date(check_month[2], check_month[1], check_month[0])
            umwandlung = datetime.date.timetuple(aktuelles_pruef_datum)
            if umwandlung.tm_wday == 4:
                print(f"{check_month[0]}.{check_month[1]}.{check_month[2]}")
                summe += 1
        break
print(f"Summe: {summe}")