2015-03-06 1 views
0
def date(): 
    date = input() 
    d,m,y = date.split('/') 
    yd400 = int(y) % 400 
    yd4 = int(y) % 4 
    yd100 = int(y) % 100 
    if m == '2' and d == '30': 
     print('Invalid Date') 

    elif m == '2' and d == '29' and (yd400 != 0 or (yd4 != 0 and yd100 == 0)): 
     print('Invalid Date') 

    elif d == '31' and (m == '2' or m == '4' or m == '6' or m == '9' or m == '11'): 
     print('Invalid Date') 

    else: 
     print('Valid Date') 

Y at-il un moyen de simplifier cette partie?Python: Comment simplifier une expression booléenne longue?

(elif d == '31' and (m == '2' or m == '4' or m == '6' or m == '9' or m == '11')) 

J'écris ceci pour vérifier la validité d'une date insérée, sans utiliser import datetime

+0

J'ajouterais aussi que vous devriez avoir des bornes simples car je pourrais entrer m/d/y et ça passerait (12/01/2014) ou même n'importe quoi (3245/3483/3859372) et ça passerait. – cdhagmann

Répondre

4

Utilisez un test d'appartenance à un ensemble:

d == '31' and m in {'2', '4', '6', '9', '11'} 

Notez que votre code en voudra peut-être pour gérer les principaux caractères 0 sur les portions du mois et du jour:

d, m = d.lstrip('0'), m.lstrip('0') 

de sorte que 02/03/2015 est toujours considéré comme une date valide.

+0

Ohhh, si le code est comme ça? (Si y == 5: impression (suite) elif y = 20: impression (échelle, y) elif y == 11: impression (suite) y = 35 impression (échelle, y) elif y == 32: impression (résultat) y = 68 impression (échelle, y)) – Lexonss

+0

est-il possible de le simplifier? – Lexonss

+0

@Lexonss: Je n'ai * aucune idée * ce que vous essayez de faire là-bas, les commentaires ne sont pas la place pour le code, vraiment. –