Brauche unbedingt eure Hilfe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Melanie17
User
Beiträge: 5
Registriert: Donnerstag 1. Juli 2004, 15:11

hallo zusammen,
ich habe ein riesengroßes problem. ich soll eine programmierung von python erklären können. und das problem ist, das ich gar nichts davon verstehe. könnt ihr mir vielleicht weiterhelfen? Was bedeuten die einzelnen Schritte?
hier ist die programmierung:

Code: Alles auswählen

Monat=5
Jahr=2004
erstertag=6

Monate = ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"]
Monattage =   [31,28,31,30,31,30,31,31,30,31,30,31] # Angabe der Tage der Monate
Tage = []

if erstertag != 1: #!=ungleich
    for i in range(0,erstertag-1):
        tage.insert(i,"  ")       #insert: ist eine Methode Elemente einzuführen.
        
for i in range(erstertag-1,(monattage[monat-1]+erstertag-1)):
        tage.insert(i,i-erstertag+2)
   
if erstertag == 1:
     tage[0]=1
          
if (erstertag+monattage[monat])  < 46:  # Positionen mit Ziffer
   for i in range (erstertag+monattage[monat-1],46):
       tage.insert(i, " ")
    
print "            ",monate[monat-1],jahr
print " "
print "  Mo   Di   Mi   Do   Fr   Sa   So  "
print "  ",tage[0]," ",tage[1]," ",tage[2],"  ",tage[3]," ",tage[4],"",tage[5],"  ",tage[6],"  "
print "  ",tage[7],"  ",tage[8],"  ",tage[9],"  ",tage[10],"  ",tage[11],"  ",tage[12],"  ",tage[13]," "
print " ",tage[14]," ",tage[15]," ",tage[16]," ",tage[17]," ",tage[18]," ",tage[19]," ",tage[20]," "
print " ",tage[21]," ",tage[22]," ",tage[23]," ",tage[24]," ",tage[25]," ",tage[26]," ",tage[27]," "
print " ",tage[28]," ",tage[29]," ",tage[30]," ",tage[31]," ",tage[32]," ",tage[33]," ",tage[34]," "
print " ",tage[35]," ",tage[36]," ",tage[37]," ",tage[38]," ",tage[39]," ",tage[40]," ",tage[41]," "
print " ",tage[42]," ",tage[43]," ",tage[44]," "
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Melanie17,

ich hab erstmal Deinen Code in Code-Tags gesetzt.


Gruß

Dookie
Gast

Hi!

schönes Forum hier.

Ich hoffe mal sehr, das der code von einem mitschüler ist, und nicht von einem lehrer/dozenten oder jemanden, er glaubt programmieren zu können.
Ich kommentiere mal im code:

Code: Alles auswählen

monat=5
jahr=2004
erstertag=7

monate = ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"]
monattage = [31,28,31,30,31,30,31,31,30,31,30,31] # Angabe der Tage der Monate
tage = []
"""
tage wird die große liste mit allen tagesdatumsen (jetzt noch leer).
"""

if erstertag != 1: #!=ungleich
    for i in range(0,erstertag-1):
        tage.insert(i," ") #insert: ist eine Methode Elemente einzuführen.
"""
Der 1. ist im beispiel ein samstag (mit erstertag manuell festgelegt). deswegen müssen für die darstellung 5 wochentage übersprungen werden. also beginnt die liste mit 5 blanks.
einfacher wäre gewesen:
tage = [" "] * (erstertag-1)
"""

for i in range(erstertag-1,(monattage[monat-1]+erstertag-1)):
    tage.insert(i,i-erstertag+2)
"""
hier werden (sehr umständlich) der liste die 31 tagesdatumse hinzugefügt. (Der Programmierer scheint append() nicht zu kennen.)
einfacher:
for i in range(1,monattage[monat-1]+1)):
    tage.append(i)
noch einfacher:
tage = tage + range(1,monattage[monat-1]+1)
"""

if erstertag == 1:
    tage[0]=1
"""
überflüssig!
"""

if (erstertag+monattage[monat]) < 46: # Positionen mit Ziffer
    for i in range (erstertag+monattage[monat-1],46):
        tage.insert(i, " ")
"""
am ende der liste werden noch blanks hinzugefügt, damit es unten bei der ausgabe der "Matrix" auch zu jedem index einen wert gibt. im worst case kann die liste tage 37 elemente haben, deshalb ist die "matrix" unnötig groß.
"""

print " ",monate[monat-1],jahr
print " "
print " Mo Di Mi Do Fr Sa So "
print " ",tage[0]," ",tage[1]," ",tage[2]," ",tage[3]," ",tage[4],"",tage[5]," ",tage[6]," "
print " ",tage[7]," ",tage[8]," ",tage[9]," ",tage[10]," ",tage[11]," ",tage[12]," ",tage[13]," "
print " ",tage[14]," ",tage[15]," ",tage[16]," ",tage[17]," ",tage[18]," ",tage[19]," ",tage[20]," "
print " ",tage[21]," ",tage[22]," ",tage[23]," ",tage[24]," ",tage[25]," ",tage[26]," ",tage[27]," "
print " ",tage[28]," ",tage[29]," ",tage[30]," ",tage[31]," ",tage[32]," ",tage[33]," ",tage[34]," "
print " ",tage[35]," ",tage[36]," ",tage[37]," ",tage[38]," ",tage[39]," ",tage[40]," ",tage[41]," "
print " ",tage[42]," ",tage[43]," ",tage[44]," "
"""
Da ist 44fache redundanz (wiederholung). ein fall für eine schleife.
"""
meine code-beispiele sind ungetestet.


ein beispiel, wie es auch ginge:

Code: Alles auswählen

monat=5
jahr=2004
erstertag=6

monate = ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"]
monattage = [31,28,31,30,31,30,31,31,30,31,30,31] # Angabe der Tage der Monate

tage = range(1,monattage[monat-1]+1)
tage = [str(t) for t in tage]
tage = ["Mo","Di","Mi","Do","Fr","Sa","So"] + [""]*(erstertag-1) + tage

for i,t in enumerate(tage):
    if not i%7: print
    print "%2s "%(t),
Joe
Melanie17
User
Beiträge: 5
Registriert: Donnerstag 1. Juli 2004, 15:11

danke, das hilft mir schon ein bissel weiter , aber was sind blanks und was ist matrix?
ich habe das hier aber nicht richtig verstanden:

if erster tag !=1:
for i in range (0, erstertag-1):
tage.insert(i," ")

was heißt for i in range , für was steht die 0 und erstertag-1 ???
sorry, wegen meinen vielen fragen, aber ich versteh wirklich gar nichts...
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi Melanie17!

Mit blanks meint Gast Leerzeichen, also " ".
Melanie17 hat geschrieben: was heißt for i in range , für was steht die 0 und erstertag-1 ???
Hier wird ganz einfach i von 0 bis 4 hochgezählt.
Beispiel:

Code: Alles auswählen

for i in range(0,erstertag-1):
    print i
# ergibt: 0 1 2 3 4
Gruß, mawe
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

xrange stellt quasi einen Zähler dar:
xrange(start, ende, step) zählt von start bis ende-1 mit Schrittweite step, wobei step auch weggelassen werden kann. Wird nur ein Parameter bei xrange angegeben xrange(max) so wird von 0 bis max-1 gezählt.


Gruß

Dookie
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

eine Matrix kann man mit Raster übersetzen. Eine 10x10 Matrix zum Beispiel entspricht einem Raster mit 10x10 Feldern.

Code: Alles auswählen

if erster tag !=1: #wenn erster tag ungleich 1 ist
    for i in range (0, erstertag-1): #zähle von 0 bis erstertag-1
      tage.insert(i," ") #füge ein Leerzeichen an Position i bei tage ein
Gruß

Dookie
Melanie17
User
Beiträge: 5
Registriert: Donnerstag 1. Juli 2004, 15:11

ich glaub langsam das es zwecklos ist. wieso denn von 1 bis 4 ? :cry:
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

weil erstertag = 6 ist ;)
Melanie17
User
Beiträge: 5
Registriert: Donnerstag 1. Juli 2004, 15:11

und was heißt zu jedem index ein wert? :cry: :cry:
Melanie17
User
Beiträge: 5
Registriert: Donnerstag 1. Juli 2004, 15:11

das ist jetzt bestimmt ne dreißte frage, aber könnte nicht jemand von euch mir neben jeden schritt eine eklärung für diesen dazuschreiben? :oops:
ich wäre euch sehr sehr dankbar.

liebe grüße
melanie
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Ich versuchs mal, ist aber bei dem Code nicht einfach, da hier wirklich ein Stümper am Werk war.

Code: Alles auswählen

Monat=5 # Variable "Monat" mit Wert 5 anlegen
Jahr=2004 # Variable "Jahr" mit Wert 2004
erstertag=6 # "erstertag" auf Samstag (1=Montag, 2=Dienstag ... 6=Samstag, 7=Sonntag)

#Liste mit Monatsnamen erstellen
Monate = ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"]

Monattage =   [31,28,31,30,31,30,31,31,30,31,30,31] # Angabe der Tage der Monate

#Liste für die Tage des Monats
Tage = []

# setze die (wochen)tage bis zum 1. des Monats auf Leerzeichen
if erstertag != 1: # wenn erstertag ungleich 1
    for i in range(0,erstertag-1): # Zähle von 0 bis erstertag-1-1
        tage.insert(i,"  ")       # Leerzeichen an position i in Tageliste einfügen.

#trage die Tage des Monats in die Tagesliste ein, sehr umständlich!
for i in range(erstertag-1,(monattage[monat-1]+erstertag-1)):
        tage.insert(i,i-erstertag+2)
   
if erstertag == 1:
     tage[0]=1

#fülle die Tage nach dem letzten des Monats auf Leerzeichen
if (erstertag+monattage[monat])  < 46:  # Positionen mit Ziffer
   for i in range (erstertag+monattage[monat-1],46):
       tage.insert(i, " ")

#Kalender ausgeben
print "            ",monate[monat-1],jahr
print " "
print "  Mo   Di   Mi   Do   Fr   Sa   So  "
print "  ",tage[0]," ",tage[1]," ",tage[2],"  ",tage[3]," ",tage[4],"",tage[5],"  ",tage[6],"  "
print "  ",tage[7],"  ",tage[8],"  ",tage[9],"  ",tage[10],"  ",tage[11],"  ",tage[12],"  ",tage[13]," "
print " ",tage[14]," ",tage[15]," ",tage[16]," ",tage[17]," ",tage[18]," ",tage[19]," ",tage[20]," "
print " ",tage[21]," ",tage[22]," ",tage[23]," ",tage[24]," ",tage[25]," ",tage[26]," ",tage[27]," "
print " ",tage[28]," ",tage[29]," ",tage[30]," ",tage[31]," ",tage[32]," ",tage[33]," ",tage[34]," "
print " ",tage[35]," ",tage[36]," ",tage[37]," ",tage[38]," ",tage[39]," ",tage[40]," ",tage[41]," "
print " ",tage[42]," ",tage[43]," ",tage[44]," "
Hier liessen sich sehr viele Verbesserungen anbringen, z.B. könnte man die Tage der Woche von 0-6 nummerieren, dann fiele das schwer zu verstehende "erstertag-1" an vielen stellen weg, gleiches gilt auf für Monat.
Alles in Allem sicher kein Code um Python zu lernen geschweige denn Python zu verstehen.


Gruß

Dookie
Antworten