2014-04-28 58 views
1
import datetime 


def main(): 
    date_string = input('Enter a date in mm/dd/yy format: ') 
    date_list = date_string.split('/') 
    month = int(date_list[0]) 
    day = int(date_list[1]) 
    year = int(date_list[2]) 
    while month < 1 or month > 12: 
     print('Month entered is out of range') 
     date_string = input('Re-enter a date in mm/dd/yy format: ') 
     date_list = date_string.split('/') 
     month = int(date_list[0]) 
     day = int(date_list[1]) 
     year = int(date_list[2]) 
    while day < 1 or day > 31: 
     print('Day entered is out of range') 
     date_string = input('Re-enter a date in mm/dd/yy format: ') 
     date_list = date_string.split('/') 
     month = int(date_list[0]) 
     day = int(date_list[1]) 
     year = int(date_list[2]) 
    while year != 13: 
     print('Year does not represent 2013') 
     date_string = input('Re-enter a date in mm/dd/yy format: ') 
     date_list = date_string.split('/') 
     month = int(date_list[0]) 
     day = int(date_list[1]) 
     year = int(date_list[2]) 
    print(month, day, year) 
main() 

當我運行程序並輸入無效的月份和日期時,它會一直下降到年份驗證,並且即使輸入對其他輸入中的一個無效,也會繼續發佈該提示。while循環太早了。

+0

您的代碼十分需要的功能來讀取和分裂值。您還有一個問題,如果用戶輸入有效的月份號碼和無效的日期號碼,他們可以重新輸入帶有無效月份號碼和有效日期號碼的數據。等等 –

+0

你的代碼工作正常,如果你輸入「17/20/2013」​​,是否是預期的? –

回答

0

重新開始。

你不想要三個小時while循環。你需要一個大的while循環(while not success)和三個if語句來做三個檢查,如果有任何一個失敗,將成功設置爲false。

1

你可以安排不同的是:

while True: 
    date_string = input('Enter a date in mm/dd/yy format: ') 
    date_list = date_string.split('/') 
    month = int(date_list[0]) 
    day = int(date_list[1]) 
    year = int(date_list[2]) 
    if month < 1 or month > 12: 
     print('Month entered is out of range') 
    elif day < 1 or day > 31: 
     print('Day entered is out of range') 
    elif year != 13: 
     print('Year does not represent 2013') 
    else: 
     break 
print(month, day, year) 
+0

感謝大家的快速反饋。我看到了我的方式的錯誤。 – Luke