2016-05-22 11 views
0

Ich habe versucht, Wege zu finden, diesen Code zu kürzen oder zu modifizieren, um die Effizienz zu erhöhen und die Komplexität zu reduzieren. Irgendeine Hilfe?Datum Gültigkeit und Schaltjahr Checker

Ich bin neu auf dieser Website, so hoffe ich auf eine gute Antwort: D!

a=int(input('Enter the date:')) 
b=int(input('Enter the month:')) 
c=int(input('Enter the year:')) 
if b<=12 and a<=31 and b>0 and a>0: 
    if b==2: 
     if a>29: 
      k=0 
     elif a<=29: 
      k=1 
    elif b==1 or b==3 or b==5 or b==7 or b==8 or b==10 or b==12: 
     if b>31: 
      k=0 
     else: 
      k=1 
    else: 
     if b>30: 
      k=0 
     else: 
      k=1 
else: 
    k=0 

if k==0: 
    print 'Invalid Date' 

elif k==1: 
    if (c%4)==0: 
     if (c%100)==0: 
      if (c%400)==0: 
       t=1 
      else: 
       t=0 
     else: 
      t=1 

    if t==1: 
     print 'It is a leap year and has a valid date' 
    elif t==0 : 
     if a==29 and b==2: 
      print 'It isn\'t a valid date neither a leap year' 
     else: 
      print 'It is a valid date and a leap year' 
+0

auch es gibt einen Fehler beim laufen bitte helfen! –

+1

Erste vorgeschlagene Änderung: Verwenden Sie aussagekräftige Variablennamen, z. Jahr, Monat und Tag anstelle von a, b und c. (Und ja, laut Vedang Mehta's Antwort, benutze eingebaute Bibliotheken dafür ...) –

+0

Ja, es wird kompliziert mit solchen Variablen –

Antwort

2

Verwendung eingebaute Module -

import datetime 
import calendar 


def validate_date(year, month, date): 
    """Returns True if valid date else False""" 
    try: 
     datetime.datetime(year, month, date) 
     return True 
    except ValueError: 
     return False 

Verwenden calender.isleap(year) zu überprüfen, ob die year ein Schaltjahr ist oder nicht.

+1

die Module waren hilfreich! –

1

Wenn Sie die integrierten Module vermeiden wollen und Ihren eigenen Code rollen, und wenn Sie k und t logischen Variablen ändern könnten Sie

k = (1 <= b <= 12) and (1 <= a <= [31,29,31,30,31,30,31,31,30,31,30,31][b]) 
t = (c%4 == 0) and (c%100 != 0 or c%400 == 0) 

verwenden Wie bereits von anderen empfohlen, sollten Sie auch Ihre ändern Variablennamen, um klarer zu sein. Beachten Sie, dass dies nicht testet, dass die Variablen Ganzzahlen sind.

+0

Was ist mit eingebauten Modulen nicht in Ordnung? –

+0

Dank Rory, würde diese in einer Prüfung verwenden: D. Vedang, es ist nur eine andere Art, es zu tun, denke ich –

+0

Wenn dies eine Frage ist, die in einer Prüfung gestellt wird, müssen Sie die Lösung wie Rory implementieren, andernfalls sollten eingebaute Module verwendet werden. –

0

Hier ist ein weiterer einfacher und effizienter Weg zu überprüfen, ob das eingegebene Jahr ein Schaltjahr ist oder nicht.

year = int(input("Type a year: ")) 

if year % 4 == 0 and year %100 != 0 or year % 400 == 0: 

    print ("\nIs a leap-year") 

else: 
    print ("\nIs not a leap-year") 
+0

oh ja, die Logik hatte mich verwirrt. –