Monatskalender

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
Zombielotl
User
Beiträge: 1
Registriert: Samstag 30. November 2019, 20:46
Kontaktdaten:

Ich muss für die Schule einen Monatskalender programmieren, bei dem man den Tag an dem der Monat beginnt und die Länge angibt.
Die Frage ist, mit welcher Art von Schleifen soll ich verwenden? Ich habe mich schon die letzten tage damit beschäftigt habe aber keinen Lösungsweg gefunden der es so ausgibt wie es soll.
Es soll so geordnet ausgegeben werden(natürlich so dass sie immer gereiht untereinander stehen):
Anfang des Monats: 1 (Montag)
Dauer des Monats: 31
1 8 22 28
2 9 23 29
3 10 24 30
4 11 25 31
5 12 26
6 13 27
7 14 28

Ein paar kleine Tipps oder Bespiel Codes wären Nett


-Thanks
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Da Du schon weißt, wie oft die Schleife durchlaufen werden soll, bieten sich for-Schleifen mit range an. Anfangen kannst Du ja mit Anfang = 1. Wie sieht dort die Schleife für die erste Zeile aus?
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Eine Antwort hat sich vermutlich erledigt. Der User hat keine Lust selber nachzudenken, daher auf Stackoverflow nach einer Anwort gefragt und nach Erhalt derselben die Frage gelöscht.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Wenn die Tage pro Woche auch nebeneinander statt untereinader stehen dürfen würde ich das so machen:


Code: Alles auswählen

anzahl_tage = int(input("Wie viele Tage hat der Monat?: "))

for i in range(1,anzahl_tage + 1):
    if i % 7 == 1: print()
    print(f"{i:>5}", end = " ")  

Ergebnis:

Code: Alles auswählen

    1     2     3     4     5     6     7
    8     9    10    11    12    13    14
   15    16    17    18    19    20    21
   22    23    24    25    26    27    28
   29    30    31


oder man benutzt das Calender Modul:

Code: Alles auswählen

import calendar
y = int(input("Input the year : "))
m = int(input("Input the month : "))
print(calendar.month(y, m))
Quelle des Codes from Calender Modul: https://www.w3resource.com/python-exerc ... ise-12.php
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@/me: ah, dass der Lehrer nicht sieht, dass hier geschummelt wurde. Hast Du noch die URL zur gelöschten Frage?
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Sirius3 hat geschrieben: Donnerstag 5. Dezember 2019, 14:00 Hast Du noch die URL zur gelöschten Frage?
https://stackoverflow.com/questions/591 ... -in-python

Da waren die gleichen Fehler drin wie in diesem Beitrag (mit 15 beginnende Spalte fehlend und die 28 doppelt).
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich wundere mich mal wieder, warum die Frage 5-Downvotes bekommen hat.
Immerhin ist das ja nur die halbe Lösung, da nur Monate, die mit Montag anfangen abgebildet werden.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

@Sirius3: wie hast du die denn zu sehen bekommen? Ich bekomme nur die ist-geloescht-Seite.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Naja dann wird der Lehrer aber bestimmt hier den Thread finden und wird merken dass er sich Unterstützung gesucht hat.


@__deets__:

Glaube ab 10k Reputation kann man die sehen wenn man die URL hat.

#edit: https://stackoverflow.com/help/privileg ... ator-tools
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ah. Da fehlen noch ein paar 1000 :)
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Die Fähigkeit, im Internet nach Problemlösungen zu suchen und zu finden, sollte mit einer guten Note belohnt werden.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Im Internet ohne jeglichen Einsatz nach einer Lösung zu fragen und die dann zu übernehmen ist in meinen Augen keine Leistung, die irgendwie gut benotet werden sollte.
Etwas anderes ist es, das Internet als Recherchewerkzeug zu verwenden. Das tut der Threadstarter aber offensichtlich nicht.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Er hat ja geschrieben, er hätte sich mehrere Tage selbst mit dem Thema beschäftigt und dann hier nach Tipps gefragt. Von einer kompletten Lösung war nie die Rede.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@rogerb: und er ignoriert die Hilfe und fragt lieber dort, wo es dann die Musterlösung geliefert wird.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ist die Musterlösung auf SO denn auch noch einsehbar? Wie verhält es sich da mit dem Urheberrecht? Würde die Lizenz es erlauben die Musterlösung hier zu veröffentlichen, so dass man sie finden kann wenn man danach sucht? 😈
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@Sirius3, er hat in verschiedenen Foren gefragt, 'ne Antwort erhalten und fertig.
Ob er die Musterlösung bekommt oder nur einen Ansatz, steht ja nicht in seiner Macht.
Als Fragesteller kann er auch selbst entscheiden was er mit seinen Posts macht.
Wie gesagt, als Lehrer fände ich es besser, wenn jemand um Hilfe bittet, als aufzugeben und gar keine Lösung zu finden.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Lizenz: user contributions licensed under cc by-sa 4.0 with attribution required.

https://stackoverflow.com/questions/591 ... -in-python

Frage:
user12484371 hat geschrieben: how can I print something like this in Python if the length is known?

Code: Alles auswählen

len = 31

1 8 22 28
2 9 23 29
3 10 24 30
4 11 25 31
5 12 26
6 13 27
7 14 28
I tried that but I don't know how to stop on 31

Code: Alles auswählen

for i in range(1,8):
    print(i, i+7, i+21, i+27)
Antwort:
Sayandip Dutta hat geschrieben: As mentioned in the comment, if the desired output is this:

Code: Alles auswählen

1 8 15 22 29
2 9 16 23 30
3 10 17 24 31
4 11 18 25
5 12 19 26
6 13 20 27
7 14 21 28
You can do:

Code: Alles auswählen

len_ = 31
list_ = list(range(1, days + 1))
for i in range(days//4):
    print(*list_[i::7])
NOTE: len is a python keyword, try avoiding naming your variables same as python keywords.
Das Problem an dieser Lösung ist nicht nur der Umweg über die Liste, sondern auch, dass sie verkennt, dass nicht die Anzahl der Tage//4 die Anzahl der Wochentage bestimmt, sondern diese fix exakt sieben sind. Ein Glück, dass es keinen Monat mit 27 oder 35 Tagen gibt, denn dann funktioniert der Code nicht mehr. Dazu kommen noch die nichtssagenden Variablennamen.

Code: Alles auswählen

days = 31
for weekday in range(1, 8):
    print(*range(weekday, days+1, 7))
Benutzeravatar
DeaD_EyE
User
Beiträge: 1240
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

sparrow hat geschrieben: Donnerstag 5. Dezember 2019, 18:42 Im Internet ohne jeglichen Einsatz nach einer Lösung zu fragen und die dann zu übernehmen ist in meinen Augen keine Leistung, die irgendwie gut benotet werden sollte.
Etwas anderes ist es, das Internet als Recherchewerkzeug zu verwenden. Das tut der Threadstarter aber offensichtlich nicht.
Solange der Betrug gelehrt, belohnt und gefördert wird, kann man den Kindern nichts vorwerfen.
Ehrliche Kinder sind im Nachteil und das war schon zu meiner Zeit so. Nur war das Ausmaß nicht so extrem wie heute.

Die verarschen sich alle selbst, wenn sie im Internet nach Lösungen suchen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Falls man später nur Webseiten mit PHP und Javascript entwickeln will oder es wie hier bloß um ein Pflichtfach geht und man da eigentlich keine Lust drauf hat, dann kommt man mit diesem "Ansatz" glaub ich ganz gut durch. 🙈
Antworten