2016-04-25 91 views
0

我正在嘗試爲類創建此程序,但我遇到了一個小問題。我似乎總是有循環問題!如果您輸入的日期與該問題相同,但該程序仍然有效,但如果輸入錯誤,我無法再回過頭去詢問用戶日期。我創建了True/False布爾值,但它似乎不起作用。我們還沒有學會如何導入某些日期模塊並進行轉換,因此我正在手動轉換月份。答:從用戶輸入一個數字格式的日期,例如: MM/DD/YY。Python用戶輸入和日期轉換

B.檢查用戶輸入的月份。如果它大於12或小於1,則發出錯誤消息並再次要求輸入。 C.對日期和年份進行類似的驗證測試。年份必須爲 爲2013年。(其他年份無效)。另外,年份只能是兩位數字。

D.一旦所有的輸入已被驗證,輸出字符串在長日期格式。因此,這是輸入在15年6月1日的字符串將輸出爲6月1日,2015年

def main(): 
    try_again = True 
    while try_again == True: 
     date_string = input("Please enter a date in the format 'mm/dd/yy': ") 
     date_list = date_string.split('/') 

     month = date_list[0] 
     day = date_list[1] 
     year = date_list[2] 

     if month > "12" or month < "01": 
      print('Error, please re-enter the date!') 

     if year != '13': 
      print('Error! The year must be 2013') 

     if len(year) > 2: 
      print('Error! The year can only be 2 digits long!') 

     else: 
      print_date(month, day, year) 
      try_again = False 



def print_date(month, day, year): 

# Convert to 2013 because 2013 is the only valid year 
# for this program. 

if year == '13': 
    year = '2013' 

# Convert the number values to the actual month. 

if month == '01': 
    month = 'January' 
if month == '02': 
    month = 'February' 
if month == '03':  
    month = 'March' 
if month == '04': 
    month = 'April' 
if month =='05': 
    month = 'May' 
if month == '06': 
    month = 'June' 
if month == '07': 
    month = 'July' 
if month == '08': 
    month = 'August' 
if month == '09': 
    month = 'September' 
if month =='10': 
    month = 'October' 
if month == '11': 
    month = 'November' 
if month == '12': 
    month = 'December' 


# Print the date in the correct format 
print(month + " " + day + ',' + " " + year) 


main() 
+0

而不是額外的'if'語句,你不想'elif'語句嗎? – jcfollower

+0

只是一個警告:比較'月'與字符串'01'和'12'是不會保證它是一個有效的輸入:''01'<「0asb」< '12' ==> True' –

+0

你會最好檢查'如果不是(month.isdigit()和1 <= int(month)<= 12)' –

回答

1

else只在最後if聲明,無論是添加continue到每一個條件或更改中間ifelif

if month > "12" or month < "01": 
     print('Error, please re-enter the date!') 
     continue #back to beginning of loop 

    if year != '13': 
     print('Error! The year must be 2013') 
     continue #back to beginning of loop 

    if len(year) > 2: 
     print('Error! The year can only be 2 digits long!') 
     continue #back to beginning of loop 

    #else: #doesn't really change anything any more 
    #only happens if none of the continue s happend 
    print_date(month, day, year) 
    try_again = False 

elif S:

if month > "12" or month < "01": 
     print('Error, please re-enter the date!') 

    elif year != '13': 
     print('Error! The year must be 2013') 

    elif len(year) > 2: 
     print('Error! The year can only be 2 digits long!') 

    else: 
     print_date(month, day, year) 
     try_again = False 

臨屋只有其中一個條件將會發生。

+0

不能相信我忽略了這個錯誤。謝謝 –

+0

如果你接受答案,那麼[有一個機制](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 –