2016-11-15 10 views
0

2つの質問があります1_このフォームを使用することはできません05/04/2011私にエラーを与え続ける 2_ユーザーが負の数を使用するのをブロックできません。あなたがして使用することができ、日付のmm/dd/yyyy形式をPythonで検証する

def main(): 
    # ask the user for a date as a string in the form mm/dd/yyyy 
    date = input("Please enter a date in form mm/dd/yyyy: ") 
    months, days, years = date.split("/") 

    # ask about the month 
    m = range(1,13) 
    months = m[eval(months)-1] 
    # april have only 30 days 
    if months in range(4,5): 
     D = range(1,31) 
     Days = D[eval(days)-1] 
    # june have only 30 days 
    elif months in range(6,7): 
     D = range(1,31) 
     Days = D[eval(days)-1] 
    # september have only 30 days 
    elif months in range(9,10): 
     D = range(1,31) 
     Days = D[eval(days)-1] 
    # november have only 30 days 
    elif months in range(11,12): 
     D = range(1,31) 
     Days = D[eval(days)-1] 
    # ask about days 
    d = range(1,32) 
    days = d[eval(days)-1] 
    # ask about the years 
    y = range(1,2017) 
    years = y[eval(years)-1] 
    if months <= 0: 
     print("you can't use a nagatve number") 
    if days <= 0: 
     print("you can't use negaive numbers") 
    if years <= 0: 
     print("you can't use negaiive numbers") 
    print(months,"/",days,"/",years,"is a valid date") 
main() 

答えて

0

あなたは、Python​​図書館で見なければならない、特にその代わりに、独自のバグの日付パーサを書くの

datetime.strptime(date_string, format)へ:ここ はコードです

datestring = input("Please enter a date in form mm/dd/yyyy: ") 
try: 
    date = datetime.strptime(datestring, '%m/%d/%Y') 
except ValueError: 
    print("Invalid date entered!") 

あなたのコードには本当に悪い習慣がいくつかあります。たとえば、文字列を整数に単純に評価するのに、evalを使用しないでください。いうより:

months = int(months) 

やコードなどmonths in range(4,5)としてはmonths == 4のように書き換えることができますが、あなたもif months in [4, 6, 9, 1]:を使用することもできました:

m = range(1,13) 
months = m[eval(months)-1] 

あなたは、単に書かれている可能性があります。しかし、あなたは2月を完全に忘れました。これは、現在の年がうるう年であるかどうかによっても異なります。