Python :: Aufgabe #21
4 Lösungen

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:

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)

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)

""" #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()

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}")