#39965: python解題方式(僅供餐烤)


594samuel88@gmail.com (samuel wang)

學校 : 不指定學校
編號 : 270362
來源 : []
最後登入時間 :
2024-04-15 21:41:20
a263. 日期差幾天 -- 板橋高中練習題 | From: [1.162.164.81] | 發表日期 : 2024-04-15 21:57

我的方法是

a =list(map(int,input().split()))
b =list(map(int,input().split()))
ab輸入之後,計算a日期~該年結束總天數+b日期的年初~b日期,再加上a年~b年中間的所有年
所以我些了一個def,幫我回傳日期與該年年初/年末的日期差
def monthday(mone,yea):#輸入月份+年分,回傳天數
    return [0,31,28 +runain(yea),31,30,31,30,31,31,30,31,30,31][mone]
def remday(a,fish=0):# fish=1為加上幾天為一年,fish=0為該年已過了幾天
  day=0
  day+= monthday(a[1],a[0])-a[2]#此月份剩下天數
  month=[1,2,3,4,5,6,7,8,9,10,11,12]
  for i in range(a[1]):#移除過過的月份
    del month[0]
  for m in month:#將剩餘月份天數加入day
    day+=monthday(m,a[0])
  if fish : day=( 365+runain(a[0]) ) - day
  return day
day = remday(a,0)+ remday(b,1)
將兩日期中間的天數都加上去
for i in range(a[0]+1,b[0]) : day+= 365+runain(i)
如果ab同年,那要減掉該年總天數
if a[0]==b[0] : day-=365+runain(a[0])
#提供一個小技巧,python裡可以將True視為1,所以我先設一個
def runain(yea):return( yea%400 == 0 or (yea%100 != 0 and yea%4 == 0))
這樣就可以直接用 天數=365+runain(年分)
如果回傳True,就會幫你+1,若回傳False,則+0
最後
print(day)
就完成了
ps.因為省空間把if:...一行表示,看不清楚的自己加上縮排哈
 
ZeroJudge Forum