1. 程式人生 > >第四題:輸入某年某月某日,判斷這一天是這一年的第幾天?

第四題:輸入某年某月某日,判斷這一天是這一年的第幾天?

#輸入某年某月某日,判斷這一天是這一年的第幾天?
'''思路:首先年月日是分著輸入還是一塊輸入,想到如果一塊輸入可能還需要分割分別找到年月日
所以還是分著輸入比較好;接著考慮計算天數其實就是往常月份的天數和加上本月天數(如:7月5號就是前6個月天數之和加上5)
那麼接下來的問題就是怎麼找到前幾個月天數之和,這裡我們用到一個列表來儲存前幾個月的天數,
list=[0,31,59,90,120,151,181,212,243,273,304,334,365],那麼7月5號是第幾天就可以簡單表示了:5+list[month-1]。
還需要考慮的是閏年還是平年,閏年2月是29天,閏年判斷條件:(year%4==0 and year%100!=0)||year%400==0 '''

#必須首先轉化成整型,因為input()預設為字元型
#and和or的使用
#輸入時合法的判斷

#方法一:首先驗證輸入的年月日是否正確,符合條件的直接輸出一個list,是閏年時天數再加一
'''
year=int(input('input year:'))#首先判斷:輸入的年月日是否合法
if(year>0):
    month=int(input('input month:'))
    if(0<month<13):
        day=int(input('input day:'))
        daylist=[31,29,31,30,31,30,31,31,30,31,30,31]#daylist為限制天數做準備,每個月的天數是有範圍的
        if(0<day<=daylist[month-1]):
            days=0
            list=[0,31,59,90,120,151,181,212,243,273,304,334,365]
            if((year % 4 == 0 and year%100!=0 and month>2) or (year%400==0 and month>2)):#閏年的二月是特殊的,條件少一個也不行:四年一閏and百年不閏or四百年再閏,還有月份要大於2,之間是and還是or
                days=day+list[month-1]+1
            else:
                days=day+list[month-1]
            print(days)
        else:
            print('day error')
    else:
        print('month error')
else:
    print('year error')
'''
#方法二:整體輸入年月日,用分割方法找出年月日split(),這樣可以年月日連著輸入
'''
date=input('輸入年月日:yyyy-mm-dd:')
y,m,d=(int(i)for i in date.split('-'))
Dth=0
months1=[0,31,60,91,121,152,182,213,244,274,305,335,366] #閏年
months2=[0,31,59,90,120,151,181,212,243,273,304,334,365] #平年
if ((y%4==0)and(y%100!=0)) or((y%100==0)and(y%400==0)):
    Dth=months1[m-1]+d
else:
    Dth=months2[m-1]+d
print('總天數:',Dth)
'''
#方法三:用一個leap標誌
'''year=int(input('input year:'))
month=int(input('input month:'))
day=int(input('input day:'))
days=0
list=[0,31,59,90,120,151,181,212,243,273,304,334,365]
if(0<month<13):
    days=list[month-1]+day
else:
    print('data error')
leap=0
if((year % 4 == 0 and year%100!=0 and month>2) or (year%400==0 and month>2)):#閏年的二月是特殊的,條件少一個也不行:四年一閏and百年不閏or四百年再閏,還有月份要大於2,之間是and還是or
   leap=1
if(leap==1):
    print(days+1)
else:
    print(days)
   ''' 
#方法四:兩個list,判斷是閏年還是平年後,直接對應相應的list就可以了
'''while(1):
    year=int(input("年:\n"))
    month=int(input("月:\n"))
    day=int(input("日:\n"))
    months1=[0,31,60,91,121,152,182,213,244,274,305,335,366] #閏年
    months2=[0,31,59,90,120,151,181,212,243,273,304,334,365] #平年
    if ((year%4==0)and(year%100!=0)) or((year%100==0)and(year%400==0)):
        Dth=months1[month-1]+day
    else:
        Dth=months2[month-1]+day
    print('總天數:',Dth)
'''
#方法五:利用time模組
'''
import time
print(time.strptime('2017-9-20','%Y-%m-%d')[7])#此處的大小寫必須是這樣的
'''
#方法六:利用calendar模組
#!/usr/bin/env python
#-*- coding:utf-8 -*-
'''
import calendar
year = int(input("year: "))
month = int(input("month: "))
day = int(input("day: "))
days = 0
if 0 < month <= 12:
    _, month_day = calendar.monthrange(year, month)
    if day <= month_day:
        for m in range(1, month):
            _, month_day = calendar.monthrange(year, m)
            days += month_day
        days += day
        print(days)
    else:
        print("input day error")
else:
    print("input month error")
'''
#方法七:匯入time模組
#! /usr/bin/env python
# coding:utf-8

import time
D=input("請輸入年份,格式如XXXX-XX-XX:")
d=time.strptime( D,'%Y-%m-%d').tm_yday
print("the {} day of this year!" .format(d))