Hilfe bei Kalender

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
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Willkommen im Forum!

Warum stehen in den ersten 5 Zeilen Zuweisungen, die du aber erst am Ende des Skripts brauchsts?

Der Name schaltjahr ist schlecht gewählt. Erzeugt es ein Schaltjahr? Nein, es überprüft, also wäre `is_schaltjahr` besser. Zeile 8 ist überflüssig. Sorg lieber vorher dafür, dass du eine Zahl übergeben bekommst. Statt 1 und 0 verwende lieber True und False und lass die Klammern weg:

Code: Alles auswählen

def is_schaltjahr(jahr):
    if not jahr%400 or not jahr%4 and jahr%100:
        return True
    else:
        return False
monatsl ist ebenso ein schlechter Name. Besser sowas wie len_of_month. Gleiches gilt bei jahrl.
Zeile 61 wird nie angewendet werden, da der if-Block davor schon fündig geworden ist.


Warum einmal mit und einmal ohne `int`? Ah, ich habs verstanden. Um den Rest wegzubekommen mach lieber 2 `/` Verwende lieber divmod:

Code: Alles auswählen

    j=jahr%100
    c=int(jahr/100) #c=jahr//100

    c,j = divmod(jahr,100)
Du hast zuviele Kommentare da wo es nicht unbedingt notwendig ist und keine, wo eher welche Sinn machen (Z. 76). Warum erläuterst du nicht das Prinzip, dass du verwendest, oder einfach den Namen des Algorythmus?
Zeilen 79-92 lässt sich verkürzen.

Code: Alles auswählen

return ('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag')[d]
Warum gibts du eigentlich keine Zahl zurück? Das macht hier mehr Sinn. Dann kannst du später immernoch leicht den Wochentag in einen String umwandeln.

Sich wiederholende Sachen wie `[1,3,5,7,8,10]` lassen sich besser an eine Variable binden. Das ist übersichtlicher. Zeilen 120 und 121 lassen sich verkürzen:

Code: Alles auswählen

monat==2 and (tag == 28+is_schaltjahr(jahr)
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

jbs hat geschrieben:

Code: Alles auswählen

monat==2 and (tag == 28+is_schaltjahr(jahr)
Das "28+" hätte ich zwar ebenso gelöst, aber es passt eigentlich nicht so recht zu deinem Vorschlag, die Funktion is_schaltjahr() einen Wahrheitswert zurückliefern zu lassen (ja, sicher funktioniert das auch so, aber es ist für Anfänger nicht offensichtlich, dass "28+True = 29" ist).

Und: Man sollte sich entscheiden, ob man durchgäng englische oder deutsche Bezeichner wählt: is_leapyear() oder ist_schaltjahr()

Edit: Alternativ:

Code: Alles auswählen

def ist_schaltjahr(jahr): 
    return bool(not jahr%400 or not jahr%4 and jahr%100)


Könnte man jetzt auch mit lambda machen ...
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Bloß nicht! Lambda ist immer unleserlich! IMMER! :twisted:
Antworten