Wir sollen für die Schule ein Programm schreiben, dass den Kalender eines beliebigen Jahres ausgibt. Ohne grafik und son schnickschnack, einfach die Daten und den Wochentag untereinander aufgelistet, unter Berücksichtigung von Schaltjahren und so.
Bei meinem jetzigen Programm bekomme ich den Januar - sogar korekkt, aber dann fliegt er in Zeile 119 mit "unboundlocalerror local variable 'jahr' referenced before assignment" raus. Was ich so zu der Meldung gefunden habe, bringt mich nicht weiter.
Könnt ihr mir helfen?
Danke schonmal!
PS: Wo ich dabei bin: Wie kann ich den Zeichensatz auf UTF-8 stellen um Umlaute zu verwenden?
Code: Alles auswählen
tag = 1
monat = 1
jahr=int(input('jahr eingeben'))
def schaltjahr(jahr):
jahr=int(jahr)
if (jahr%400)==0:
return 1
elif (jahr%4==0) and (jahr%100)!= 0:
return 1
else:
return 0
#........................ Funktion der Monatslaenge .....................
def monatsl(jahr, monat):
if monat in [1, 3, 5, 7, 8, 10, 12]:
return 31
elif monat in [4, 6, 9, 11]:
return 30
elif monat == 2:
if schaltjahr(jahr) == 1:
return 29
else:
return 28
#........................ Funktion der Jahreslaenge .....................
def jahrl(jahr):
if schaltjahr(jahr) == 1:
return 366
else:
return 365
#........................ Funktion des Wochentages.....................
# Kennzahlen:
# k=Monatskennzahl
# j=Jahreszahl innerhalb eines Jahrhunderts
# c=Anzahl der vollen vergangenen Jahrhunderte
# d=Tag
def wochentag(jahr, monat, tag): # Definition wochentag wird angewendet
if monat in [2,3,11]: # falls der Monat Februar, Maerz oder November ist:
k=2 # Monatskennzahl = 2
elif monat in [1,10]: # andernfalls, wenn der Monat Januar oder Oktober ist:
k=6 # Monatskennzahl = 6
elif monat in [4,7]: # andernfalls, wenn der Monat April oder Juli ist:
k=5 # Monatskennzahl = 5
elif monat==5: # andernfalls, wenn der Monat Mai ist:
k=0 # Monatskennzahl = 0
elif monat==6: # andernfalls, wenn der Monat Juni ist:
k=3 # Monatskennzahl = 3
elif monat==8: # andernfalls, wenn der Monat August ist:
k=1 # Monatskennzahl = 1
elif monat in [9,12]: # andernfalls, wenn der Monat September oder Dezember ist:
k=4 # Monatskennzahl = 4
elif schaltjahr(jahr)==1 and monat==1: # andernfalls, wenn es ein Schaltjahr und der Monat Januar ist:
k=5 # Monatskennzahl =5
elif schaltjahr(jahr)==1 and monat==2: # andernfalls, wenn es ein Schaltjahr und der Monat Februar ist:
k=1 # Monatskennzahl = 1
else: # bei anderen Varianten:
k=0 # Monatskennzahl = 0
j=jahr%100
c=int(jahr/100)
m=int(j/4)
d=tag+k+j+m-2*(c%4)
d=int(d%7)
if d==0:
return 'Sonntag'
elif d==1:
return 'Montag'
elif d==2:
return 'Dienstag'
elif d==3:
return 'Mittwoch'
elif d==4:
return 'Donnerstag'
elif d==5:
return 'Freitag'
elif d==6:
return 'Samstag'
#...................... Funktion des naechsten Tages ...........................
def nexttag(tag):
if monat in [1,3,5,7,8,10] and tag == 31:
tag = 1
elif monat in [4,6,9] and tag == 30:
tag = 1
elif monat == 2 and schaltjahr(jahr)==0 and tag == 28 or\
monat == 2 and schaltjahr(jahr) == 1 and tag == 29:
tag = 1
elif monat == 12 and tag == 31:
tag = 1
else:
tag = tag + 1
return tag
#............................... Funktion des naechsten Monats .................
def nextmonat(monat):
if monat in [1,3,5,7,8,10] and tag == 31:
monat = monat + 1
elif monat in [4,6,9] and tag == 30:
monat = monat + 1
elif monat == 2 and schaltjahr(jahr)==0 and tag == 28 or\
monat == 2 and schaltjahr(jahr) == 1 and tag == 29:
monat = monat + 1
elif monat == 12 and tag == 31:
monat = 1
jahr = jahr + 1
else:
monat = monat
return monat
################################################################################
while tag<32 and monat<13:
print(str(tag)+'. '+str(monat)+'. - '+str(wochentag(jahr, monat, tag)))
tag=nexttag(tag)
monat=nextmonat(monat)