1. 程式人生 > 其它 >字典 選取前100_100道 Python 經典練習題-004

字典 選取前100_100道 Python 經典練習題-004

技術標籤:字典 選取前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())

你思考一下這道題是不是也可以用遞迴來解決?請貼出程式碼!