Kurs:Python/LG/Py2009/Aufgaben (Pape)/Berechnen des Wochentags eines Datums
Website mit Aufgabenstellung, Musterlösung
Version 1.0[Bearbeiten]
Kinderkrankheiten besiegt.
###
# P R O G R A M M - B E R E C H N E T D E N W O C H E N T A G
# Aufgabe: Fuer einen Tag (1 - 31), den Monat (1 - 12) und ein Jahr soll der zugehoerige Wochentag berechnet werden.
###
# V A R I A B L E N
januar =31
februar =28
maerz = 31
april =30
mai = 31
juni = 30
juli = 31
august = 31
september = 30
oktober =31
november = 30
dezember = 31
# E I N G A B E
tag = input ("Bitte geben Sie den Tag (1 bis 31) ein: ")
monat = input ("Bitte geben Sie den Monat (1 bis 12) ein: ")
jahr = input ("Bitte geben Sie das Jahr ein: ")
# Pruefung der Eingabe - NICHT IMPLEMENTIERT
print "Protokoll: Pruefung nicht implementiert"
# B E R E C H N U N G
anzahl_tage = ( jahr - 1900 ) * 365 + ( jahr - 1900 ) // 4
print anzahl_tage
if monat <= 2 and (jahr-1900) % 4 == 0:
anzahl_tage -= 1
print "Protokoll: Schaltjahr, Anzahl Tage minus 1."
if monat == 1:
anzahl_tage += tag
elif monat == 2:
anzahl_tage += januar + tag
elif monat == 3:
anzahl_tage += januar + februar + tag
elif monat == 4:
anzahl_tage += januar + februar + maerz + tag
elif monat == 5:
anzahl_tage += januar + februar + maerz + april + tag
elif monat == 6:
anzahl_tage += januar + februar + maerz + april + mai + tag
elif monat == 7:
anzahl_tage += januar + februar + maerz + april + mai + juni + tag
elif monat == 8:
anzahl_tage += januar + februar + maerz + april + mai + juni + juli + tag
elif monat == 9:
anzahl_tage += januar + februar + maerz + april + mai + juni + juli + august + tag
elif monat == 10:
anzahl_tage += januar + februar + maerz + april + mai + juni + juli + august + september + tag
elif monat == 11 :
anzahl_tage += januar + februar + maerz + april + mai + juni + juli + august + september + oktober + tag
elif monat == 12:
anzahl_tage += januar + februar + maerz + april + mai + juni + juli + august + september + oktober + november + tag
print anzahl_tage
wochentag = anzahl_tage % 7
print "Protokoll:", wochentag
# A U S G A B E
if wochentag == 0:
print "Sonntag"
elif wochentag == 1:
print "Montag"
elif wochentag == 2:
print "Dienstag"
elif wochentag == 3:
print "Mittwoch"
elif wochentag == 4:
print "Donnerstag"
elif wochentag == 5:
print "Freitag"
elif wochentag == 6:
print "Samstag"
else:
print "Fehler"
Protokoll[Bearbeiten]
2.) Nach der Korrektur des Fehlers ergibt sicht folgendes Protokoll:
Bitte geben Sie den Tag (1 bis 31) ein: 1
Bitte geben Sie den Monat (1 bis 12) ein: 3
Bitte geben Sie das Jahr ein: 2009
Protokoll: Pruefung nicht implementiert
39812
39872
Protokoll: 0
Sonntag
1.) Lach ;-) Fehler entdeckt, statt +=
bei den Monaten nur =
.
Bitte geben Sie den Tag (1 bis 31) ein: 1
Bitte geben Sie den Monat (1 bis 12) ein: 3
Bitte geben Sie das Jahr ein: 2009
Protokoll: Pruefung nicht implementiert
39812
60
Protokoll: 4
Donnerstag
Bitte geben Sie den Tag (1 bis 31) ein: 1
Bitte geben Sie den Monat (1 bis 12) ein: 2
Bitte geben Sie das Jahr ein: 2009
Protokoll: Pruefung nicht implementiert
39812
39844
Protokoll: 0
Sonntag
Version 0.63[Bearbeiten]
###
# P R O G R A M M - B E R E C H N E T D E N W O C H E N T A G
# Aufgabe: Fuer einen Tag (1 - 31), den Monat (1 - 12) und ein Jahr soll der zugehoerige Wochentag berechnet werden.
###
# V A R I A B L E N
januar =31
februar =28
maerz = 31
april =30
mai = 31
juni = 30
juli = 31
august = 31
september = 30
oktober =31
november = 30
dezember = 31
# E I N G A B E
tag = input ("Bitte geben Sie den Tag (1 bis 31) ein: ")
monat = input ("Bitte geben Sie den Monat (1 bis 12) ein: ")
jahr = input ("Bitte geben Sie das Jahr ein: ")
# Pruefung der Eingabe - NICHT IMPLEMENTIERT
print "Protokoll: Pruefung nicht implementiert"
# B E R E C H N U N G
anzahl_tage = ( jahr - 1900 ) * 365 + ( jahr - 1900 ) // 4
if monat <= 2 and (jahr-1900) % 4 == 0:
anzahl_tage -= 1
print "Protokoll: Schaltjahr, Anzahl Tage minus 1."
if monat == 1:
anzahl_tage += tag
elif monat == 2:
anzahl_tage += januar + tag
elif monat == 3:
anzahl_tage = januar + februar + tag
elif monat == 4:
anzahl_tage = januar + februar + maerz + tag
elif monat == 5:
anzahl_tage = januar + februar + maerz + april + tag
elif monat == 6:
anzahl_tage = januar + februar + maerz + april + mai + tag
elif monat == 7:
anzahl_tage = januar + februar + maerz + april + mai + juni + tag
elif monat == 8:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + tag
elif monat == 9:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + tag
elif monat == 10:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + september + tag
elif monat == 11 :
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + september + oktober + tag
elif monat == 12:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + september + oktober + november + tag
wochentag = anzahl_tage % 7
print "Protokoll:", wochentag
# A U S G A B E
if wochentag == 0:
print "Sonntag"
elif wochentag == 1:
print "Montag"
elif wochentag == 2:
print "Dienstag"
elif wochentag == 3:
print "Mittwoch"
elif wochentag == 4:
print "Donnerstag"
elif wochentag == 5:
print "Freitag"
elif wochentag == 6:
print "Samstag"
else:
print "Fehler"
Version 0.62[Bearbeiten]
###
# P R O G R A M M - B E R E C H N E T D E N W O C H E N T A G
# Aufgabe: Fuer einen Tag (1 - 31), den Monat (1 - 12) und ein Jahr soll der zugehoerige Wochentag berechnet werden.
###
# V A R I A B L E N
januar =31
februar =28
maerz = 31
april =30
mai = 31
juni = 30
juli = 31
august = 31
september = 30
oktober =31
november = 30
dezember = 31
# E I N G A B E
tag = input ("Bitte geben Sie den Tag (1 bis 31) ein: ")
monat = input ("Bitte geben Sie den Monat (1 bis 12) ein: ")
jahr = input ("Bitte geben Sie das Jahr ein: ")
# Pruefung der Eingabe - NICHT IMPLEMENTIERT
print "Pruefung nicht implementiert"
# B E R E C H N U N G
anzahl_tage = ( jahr - 1900 ) * 365 + ( jahr - 1900 ) // 4
if monat <= 2 and (jahr-1900) % 4 == 0:
anzahl_tage -= 1
if monat == 1:
anzahl_tage += tag
elif monat == 2:
anzahl_tage += januar + tag
elif monat == 3:
anzahl_tage = januar + februar + tag
elif monat == 4:
anzahl_tage = januar + februar + maerz + tag
elif monat == 5:
anzahl_tage = januar + februar + maerz + april + tag
elif monat == 6:
anzahl_tage = januar + februar + maerz + april + mai + tag
elif monat == 7:
anzahl_tage = januar + februar + maerz + april + mai + juni + tag
elif monat == 8:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + tag
elif monat == 9:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + tag
elif monat == 10:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + september + tag
elif monat == 11 :
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + september + oktober + tag
elif monat == 12:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + september + oktober + november + tag
wochentag = anzahl_tage % 7
print wochentag
# A U S G A B E
if wochentag == 0:
print "Sonntag"
elif wochentag == 1:
print "Montag"
elif wochentag == 2:
print "Dienstag"
elif wochentag == 3:
print "Mittwoch"
elif wochentag == 4:
print "Donnerstag"
elif wochentag == 5:
print "Freitag"
elif wochentag == 6:
print "Samstag"
else:
print "Fehler"
Version 0.61[Bearbeiten]
Kleinere Verbesserungen.
###
# P R O G R A M M - B E R E C H N E T D E N W O C H E N T A G
# Aufgabe: Fuer einen Tag (1 - 31), den Monat (1 - 12) und ein Jahr soll der zugehoerige Wochentag berechnet werden.
###
# V A R I A B L E N
januar =31
februar =28
maerz = 31
april =30
mai = 31
juni = 30
juli = 31
august = 31
september = 30
oktober =31
november = 30
dezember = 31
# E I N G A B E
tag = input ("Bitte geben Sie den Tag (1 bis 31) ein: ")
monat = input ("Bitte geben Sie den Monat (1 bis 12) ein: ")
jahr = input ("Bitte geben Sie das Jahr ein: ")
# Pruefung der Eingabe - NICHT IMPLEMENTIERT
print "Pruefung nicht implementiert"
# B E R E C H N U N G
anzahl_tage = ( jahr - 1900 ) * 365 + ( jahr - 1900 ) / 4
if monat <= 2 and (jahr-1900) % 4 == 0:
anzahl_tage -= 1
if monat == 1:
anzahl_tage += tag
elif monat == 2:
anzahl_tage += januar + tag
elif monat == 3:
anzahl_tage = januar + februar + tag
elif monat == 4:
anzahl_tage = januar + februar + maerz + tag
elif monat == 5:
anzahl_tage = januar + februar + maerz + april + tag
elif monat == 6:
anzahl_tage = januar + februar + maerz + april + mai + tag
elif monat == 7:
anzahl_tage = januar + februar + maerz + april + mai + juni + tag
elif monat == 8:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + tag
elif monat == 9:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + tag
elif monat == 10:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + september + tag
elif monat == 11 :
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + september + oktober + tag
elif monat == 12:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + september + oktober + november + tag
wochentag = anzahl_tage % 7
print wochentag
# A U S G A B E
if wochentag == 0:
print "Sonntag"
elif wochentag == 1:
print "Montag"
elif wochentag == 2:
print "Dienstag"
elif wochentag == 3:
print "Mittwoch"
elif wochentag == 4:
print "Donnerstag"
elif wochentag == 5:
print "Freitag"
elif wochentag == 6:
print "Samstag"
else:
print "Fehler"
Es gibt weiterhin einen Fehler. Allerdings erst ab März im Jahr 2009.
Vermutung Nr. 3: Ganzzahlen vs. Gleitkommazahlen? --Python-Clown 21:53, 22. Apr. 2009 (CEST)
Version 0.6[Bearbeiten]
###
# P R O G R A M M - B E R E C H N E T D E N W O C H E N T A G
# Aufgabe: Fuer einen Tag (1 - 31), den Monat (1 - 12) und ein Jahr soll der zugehoerige Wochentag berechnet werden.
###
# V A R I A B L E N
januar =31
februar =28
maerz = 31
april =30
mai = 31
juni = 30
juli = 31
august = 31
september = 30
oktober =31
november = 30
dezember = 31
# E I N G A B E
tag = input ("Bitte geben Sie den Tag (1 bis 31) ein: ")
monat = input ("Bitte geben Sie den Monat (1 bis 12) ein: ")
jahr = input ("Bitte geben Sie das Jahr ein: ")
# Pruefung der Eingabe - NICHT IMPLEMENTIERT
print "Pruefung nicht implementiert"
# B E R E C H N U N G
anzahl_tage = ( jahr - 1900 ) * 365 + ( jahr - 1900 ) / 4
if monat <= 2 and (jahr-1900) % 4 == 0:
anzahl_tage -= 1
if monat == 1:
anzahl_tage += tag
elif monat == 2:
anzahl_tage += januar + tag
elif monat == 3:
anzahl_tage = januar + februar + tag
elif monat == 4:
anzahl_tage = januar + februar + maerz + tag
elif monat == 5:
anzahl_tage = januar + februar + maerz + april + tag
elif monat == 6:
anzahl_tage = januar + februar + maerz + april + mai + tag
elif monat == 7:
anzahl_tage = januar + februar + maerz + april + mai + juni + tag
elif monat == 8:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + tag
elif monat == 9:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + tag
elif monat == 10:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + september + tag
elif monat == 11 :
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + september + oktober + tag
elif monat == 12:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + september + oktober + november + tag
wochentag = anzahl_tage % 7
print wochentag
# A U S G A B E
if wochentag == 0:
print "Sonntag"
elif wochentag == 1:
print "Montag"
elif wochentag == 2:
print "Dienstag"
elif wochentag == 3:
print "Mittwoch"
elif wochentag == 4:
print "Donnerstag"
elif wochentag == 5:
print "Freitag"
else:
print "Samstag"
Version 0.5[Bearbeiten]
Der Verarbeitungsabschnitt (Monate) wurde überarbeitet.
###
# P R O G R A M M - B E R E C H N E T D E N W O C H E N T A G
# Aufgabe: Fuer einen Tag (1 - 31), den Monat (1 - 12) und ein Jahr soll der zugehoerige Wochentag berechnet werden.
###
# V A R I A B L E N
januar = 31
februar = 28
maerz = 31
april = 30
mai = 31
juni = 30
juli = 31
august = 31
september = 30
oktober = 31
november = 30
dezember = 31
# E I N G A B E
tag = input ("Bitte geben Sie den Tag (1 bis 31) ein: ")
monat = input ("Bitte geben Sie den Monat (1 bis 12) ein: ")
jahr = input ("Bitte geben Sie das Jahr ein: ")
# P R U E F U N G D E R E I N G A B E
print "Pruefung nicht implementiert"
# B E R E C H N U N G
anzahl_tage = ((jahr - 1900) * 365) + ((jahr-1900)) / 4
kontrolle = (jahr-1900) % 4
if monat <= 2 and kontrolle == 0:
anzahl_tage -= 1
if monat == 2:
anzahl_tage += januar
elif monat == 3:
anzahl_tage = januar + februar
elif monat == 4:
anzahl_tage = januar + februar + maerz
elif monat == 5:
anzahl_tage = januar + februar + maerz + april
elif monat == 6:
anzahl_tage = januar + februar + maerz + april + mai
elif monat == 7:
anzahl_tage = januar + februar + maerz + april + mai + juni
elif monat == 8:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli
elif monat == 9:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august
elif monat == 10:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + september
elif monat == 11 :
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + september + oktober
elif monat == 12:
anzahl_tage = januar + februar + maerz + april + mai + juni + juli + august + september + oktober + november
anzahl_tage += tag
wochentag = anzahl_tage % 7
# A U S G A B E
if wochentag == 0:
print "Sonntag"
elif wochentag == 1:
print "Montag"
elif wochentag == 2:
print "Dienstag"
elif wochentag == 3:
print "Mittwoch"
elif wochentag == 4:
print "Donnerstag"
elif wochentag == 5:
print "Freitag"
else:
print "Samstag"
Das Programm ist weiterhin fehlerhaft, daher jetzt Abgleich mit der Musterlösung.
Vermutung Nr. 2: Die Behandlung der Schaltjahre ist fehlerhaft. --Python-Clown 21:24, 22. Apr. 2009 (CEST)
Version 0.4[Bearbeiten]
###
# P R O G R A M M - B E R E C H N E T D E N W O C H E N T A G
# Aufgabe: Fuer einen Tag (1 - 31), den Monat (1 - 12) und ein Jahr soll der zugehoerige Wochentag berechnet werden.
###
# E I N G A B E
tag = input ("Bitte geben Sie den Tag (1 bis 31) ein: ")
monat = input ("Bitte geben Sie den Monat (1 bis 12) ein: ")
jahr = input ("Bitte geben Sie das Jahr ein: ")
# Pruefung der Eingabe - NICHT IMPLEMENTIERT
print "Pruefung nicht implementiert"
# B E R E C H N U N G
anzahl_tage = ((jahr - 1900) * 365) + ((jahr-1900)) / 4
kontrolle = (jahr-1900) % 4
if monat <= 2 and kontrolle == 0:
anzahl_tage -= 1
if monat == 2:
anzahl_tage += 31
elif monat == 3:
anzahl_tage = 31 + 28
elif monat == 4:
anzahl_tage = 2 * 31 + 28
elif monat == 5:
anzahl_tage = 2 * 31 + 28 + 30
elif monat == 6:
anzahl_tage = 3 * 31 + 28 + 30
elif monat == 7:
anzahl_tage = 2 * 31 + 28 + 2 * 30
elif monat == 8:
anzahl_tage = 3 * 31 + 28 + 2 * 30
elif monat == 9:
anzahl_tage = 4 * 31 + 28 + 2 * 30
elif monat == 10:
anzahl_tage = 3 * 31 + 28 + 3 * 30
elif monat == 11 :
anzahl_tage = 4 * 31 + 28 + 3 * 30
elif monat == 12:
anzahl_tage = 4 * 31 + 28 + 3 * 30
anzahl_tage += tag
wochentag = anzahl_tage % 7
# A U S G A B E
if wochentag == 0:
print "Sonntag"
elif wochentag == 1:
print "Montag"
elif wochentag == 2:
print "Dienstag"
elif wochentag == 3:
print "Mittwoch"
elif wochentag == 4:
print "Donnerstag"
elif wochentag == 5:
print "Freitag"
else:
print "Samstag"
Das Programm wirft teils falsche Wochentage aus. Fehlersuche ;-)
Vermutung Nr. 1: Die Monate werden falsch zusammengezählt. --Python-Clown 21:22, 22. Apr. 2009 (CEST)
Version 0.31 (Nur Berechnung)[Bearbeiten]
tag = 10
monat = 2
jahr = 2009
anzahl_tage = ((jahr - 1900) * 365) + ((jahr-1900)) / 4
kontrolle = (jahr-1900) % 4
if monat <= 2 and kontrolle == 0:
anzahl_tage -= 1
if monat == 2:
anzahl_tage += 31
elif monat == 3:
anzahl_tage = 31 + 28
elif monat == 4:
anzahl_tage = 2 * 31 + 28
elif monat == 5:
anzahl_tage = 2 * 31 + 28 + 30
elif monat == 6:
anzahl_tage = 3 * 31 + 28 + 30
elif monat == 7:
anzahl_tage = 2 * 31 + 28 + 2 * 30
elif monat == 8:
anzahl_tage = 3 * 31 + 28 + 2 * 30
elif monat == 9:
anzahl_tage = 4 * 31 + 28 + 2 * 30
elif monat == 10:
anzahl_tage = 3 * 31 + 28 + 3 * 30
elif monat == 11 :
anzahl_tage = 4 * 31 + 28 + 3 * 30
elif monat == 12:
anzahl_tage = 4 * 31 + 28 + 3 * 30
anzahl_tage += tag
print anzahl_tage % 7
Version 0.3 (Berechnung)[Bearbeiten]
Berechnung wird in Angriff genommen, Prüfung zunächst ausgeklammert.
###
# P R O G R A M M - B E R E C H N E T D E N W O C H E N T A G
# Aufgabe: Fuer einen Tag (1 - 31), den Monat (1 - 12) und ein Jahr soll der zugehoerige Wochentag berechnet werden.
###
# E I N G A B E
tag = input ("Bitte geben Sie den Tag (1 bis 31) ein: ")
monat = input ("Bitte geben Sie den Monat (1 bis 12) ein: ")
jahr = input ("Bitte geben Sie das Jahr ein: ")
# Pruefung der Eingabe - NICHT IMPLEMENTIERT
print "Pruefung nicht implementiert"
# B E R E C H N U N G
print "Berechnung nicht implementiert"
# A U S G A B E
if tag == 0:
print "Sonntag"
elif tag == 1:
print "Montag"
elif tag == 2:
print "Dienstag"
elif tag == 3:
print "Mittwoch"
elif tag == 4:
print "Donnerstag"
elif tag == 5:
print "Freitag"
else:
print "Samstag"
Version 0.2[Bearbeiten]
Die Programm-Version leistet Eingabe und Ausgabe. Lediglich die Berechnung ist noch fehlerhaft.
# Programm Wochentag berechnen
# Aufgabe: Fuer einen Tag (1 - 31) und den Monat (1 - 12) soll der zugehoerige Wochentag berechnet werden.
# Eingabe
tag = input ("Bitte geben Sie den Tag (1 bis 31) ein: ")
monat = input ("Bitte geben Sie den Monat (1 bis 12) ein: ")
jahr = input ("Bitte geben Sie das Jahr ein: ")
# Pruefung der Eingabe - NICHT IMPLEMENTIERT
# Pruefung: Ist das Datum zwischen Maerz 1900 und Februar 2100?
print "Pruefung fehlt"
# Tage zwischen ?.?.1900 und Datum berechnen
differenz = jahr - 1900 * 365
kontrolle = (jahr-1900) % 4
if kontrolle == 0:
differenz += (jahr - 1900) / 4
else:
differenz = differenz + (jahr - 1900) / 4 - 1
# Monat ergaenzen
monat -= 1
if monat == 1:
differenz += 31
# Tag ergaenzen
differenz += tag
# Tage zwischen ?.?.1900 und Datum berechnen - Zwischenloesung
print "Berechnung der Differenz in Tagen, Berechnung Rest fehlt"
# differenz = input ("Bitte geben Sie eine beliebige Ganzzahl ein: ")
tag = differenz % 7
# Ausgabe je nach Rest (tag)
if tag == 0:
print "Sonntag"
elif tag == 1:
print "Montag"
elif tag == 2:
print "Dienstag"
elif tag == 3:
print "Mittwoch"
elif tag == 4:
print "Donnerstag"
elif tag == 5:
print "Freitag"
else:
print "Samstag"
Version 0.1[Bearbeiten]
# Programm Wochentag berechnen
# Aufgabe: Fuer einen Tag (1 - 31) und den Monat (1 - 12) soll der zugehoerige Wochentag berechnet werden.
# Eingabe
tag = input ("Bitte geben Sie den Tag (1 bis 31) ein: ")
monat = input ("Bitte geben Sie den Monat (1 bis 12) ein: ")
jahr = input ("Bitte geben Sie das Jahr ein: ")
# Pruefung der Eingabe - NICHT IMPLEMENTIERT
# Pruefung: Ist das Datum zwischen Maerz 1900 und Februar 2100?
print "Pruefung fehlt"
# Tage zwischen ?.?.1900 und Datum berechnen - NICHT IMPLEMENTIERT
print "Berechnung der Differenz in Tagen, Berechnung Rest fehlt"
differenz = input ("Bitte geben Sie eine beliebige Ganzzahl ein: ")
tag = differenz % 7
# Ausgabe je nach Rest (tag)
if tag == 0:
print "Sonntag"
elif tag == 1:
print "Montag"
elif tag == 2:
print "Dienstag"
elif tag == 3:
print "Mittwoch"
elif tag == 4:
print "Donnerstag"
elif tag == 5:
print "Freitag"
else:
print "Samstag"