字典 選取前100_100道 Python 經典練習題-004
阿新 • • 發佈:2021-01-13
技術標籤:字典 選取前100
題目:輸入某年某月某日,判斷這一天是這一年的第幾天?
這道題看似簡單,但實際要考慮的問題很多。首先我們要判斷平年/閏年,因為它涉及到2月是否會多一天的問題;另外我們還要判斷使用者的每一個輸入是否合法,不能整個13月,也不能整個2月30號,也不應該輸入一個年份很奇怪的數字。只要這兩點想通了,這道題就不難了。看程式碼:
def calc_nth_days(): year = int(input('年份: n')) month = int(input('月份: n')) day = int(input('日期: n')) All_Month = range(1,13) #限定月份只能是1-12月 Month_days = [31,28,31,30,31,30,31,31,30,31,30,31] #沒一個月對應的天數(平年) D = dict(zip(All_Month,Month_days))#將月份和當月天數做成一個字典,結果就是{1:31,2:28...12:31} days = 0 if int(year) not in range(1000,9999): year = int(input('你輸入的年份不科學,請重新輸入年份:n')) if int(month) not in All_Month: month = int(input('你輸入的月份不科學,請重新輸入月份:n')) if int(day) not in range(1,D.get(month)+1):#注意這裡,D.get(Month)就是獲取字典中對應月份的天數,並且日期必須在這個天數之內,+1 是因為range函式不包括最後一天,需要多加一天 day = int(input('你輸入的日期無效,請重新輸入:n')) if year % 400 == 0 or year % 4 == 0 and year % 100 != 0: Month_days[1]=29 #判斷如果滿足條件的話那麼2月天數改成29天 for i in range(1,month): #從1月計算到month月但是不包含month月,自己想原因! days += Month_days[i]#逐月相加知道month月的前一個月 return '%d 年 %d 月 %d 日是這一年的第 %d 天' %(year,month,day,days + day) #注意days+day,表示還要加上使用者輸入的日期 print(calc_nth_days())
你思考一下這道題是不是也可以用遞迴來解決?請貼出程式碼!