Wie kann man feststellen, ob ein Jahr ein Schaltjahr ist?
Ich versuche einen einfachen Taschenrechner, um zu bestimmen, ob oder nicht in einem bestimmten Jahr um ein Schaltjahr handelt.
Per definition ein Schaltjahr ist durch vier teilbar, aber nicht durch hundert, es sei denn, es ist durch vier teilbar hundert.
Hier ist mein code:
def leapyr(n):
if n%4==0 and n%100!=0:
if n%400==0:
print n, " is a leap year."
elif n%4!=0:
print n, " is not a leap year."
print leapyr(1900)
Wenn ich versuche, das innerhalb der Python-IDLE, liefert das Modul None
. Ich bin mir ziemlich sicher, dass ich bekommen sollte 1900 is a leap year
.
InformationsquelleAutor der Frage Anthony | 2012-07-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Python bietet diese Funktionen bereits in der Bibliothek-Modul 'Kalender'.
InformationsquelleAutor der Antwort mawueth
Als ein one-liner:
Es ist ähnlich wie die Mark ' s Antwortaber Kurzschlüsse beim ersten test (man beachte die Klammern).
P. Ortiz bemerkt in den Kommentaren, die standard-Bibliothek
Kalender.isleap
Funktion hat die gleiche Umsetzung.InformationsquelleAutor der Antwort Eugene Yarmash
Testen Sie drei verschiedene Dinge auf n:
Seit 1900:
Also 1900 nicht in den
if
Klausel, weil1900 % 100 != 0
istFalse
Aber 1900 auch nicht in den
else
Klausel, weil1900 % 4 != 0
ist auchFalse
Dies bedeutet, dass die Ausführung erreicht das Ende Ihrer Funktion und nicht sehen, eine return-Anweisung, so gibt es
None
.Diese Umschreibung Ihrer Funktion arbeiten sollte, und sollte zurück
False
oderTrue
je nach der Jahres Zahl, die Sie gehen in es. (Beachten Sie, dass, wie in der anderen Antwort, die Sie haben, um etwas von dem zurückgeben, anstatt es zu drucken.)(Algorithmus von Wikipedia)
InformationsquelleAutor der Antwort Sam Mussmann
Die ganze Formel enthalten sein können, in einem einzigen Ausdruck:
InformationsquelleAutor der Antwort Mark Ransom
Ihre Funktion nichts zurückgibt, so dass ist, warum, wenn Sie es mit der
print
- Anweisung erhalten SieNone
. Also entweder nur die Funktion aufrufen wie diesem:oder ändern Sie Ihre Funktion einen Wert zurückgeben (mit der
return
- Anweisung), die dann gedruckt werden, indem Sie Ihreprint
- Anweisung.Hinweis: Dies ist nicht gegen alle möglichen Probleme, die Sie haben mit Ihrem Schaltjahr-Berechnung, sondern ANTWORTEN auf IHRE SPEZIELLE FRAGE zu warum Sie sind immer
None
als Ergebnis Ihrer Funktion aufrufen, die in Verbindung mit Ihrerprint
.Erklärung:
Einige kurze Beispiele zu dem oben:
Nun wenn ich Sie rufe:
gibt es:
Die erste Zeile stammt aus der
print
Anweisung innen vonadd2()
. DieNone
aus der print-Anweisung, wenn ich die Funktion aufrufenadd2()
die nicht nicht haben eine return-Anweisung verursacht dieNone
gedruckt werden. Übrigens, wenn ich hatte gerade angerufen, dieadd2()
Funktion einfach mit (bitte beachten Sie, keineprint
- Anweisung):Ich würde bekommen haben nur die Ausgabe der print-Anweisung
the result is: 15
ohne dieNone
(sieht aus wie das, was Sie zu tun versuchen).Vergleichen Sie dies mit:
gibt:
In diesem Fall wird das Ergebnis berechnet in der Funktion
add2_New()
und keine print-Anweisung, und an den Aufrufer zurückgegeben, der Sie dann druckt es wiederum.InformationsquelleAutor der Antwort Levon
Ein Schaltjahr ist genau teilbar durch 4, außer für die Jahrhundert Jahre (Jahre endet mit 00). Die Jahrhundert Jahre ein Schaltjahr ist nur dann, wenn es perfekt ist, teilbar durch 400. Zum Beispiel,
InformationsquelleAutor der Antwort Mohammed Elzanaty
Wenn Sie nicht wollen, um
import calendar
und gelten.isleap
Methode können Sie versuchen, diese:InformationsquelleAutor der Antwort Salam