中國有句俗語叫“三天打魚兩天曬網”。某人從2010年1月1日起開始“三天打魚兩天曬網”,問這個人在以後的某一天中是“打魚”還是“曬網”。

人工智慧沒我火發表於2018-08-29

import re
import datetime
import sys

#確定檔名
filename='in.txt'
recordname='out.txt'
#讀取使用者查詢日期
checkDate=input("請輸入要查詢的日期...\n")

#正規表示式驗證使用者輸入資料正確性演算法  如果輸入不正確則停止程式執行
rex="([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8])))|(([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229"
if(re.search(rex,checkDate)):
    print("輸入日期正確,已將結果存入out.txt...")
else:
    print("輸入日期錯誤,不存在這一天或輸入格式不對")
    sys.exit(0)

#開啟檔案並且儲存使用者查詢日期
with open(filename,'a') as file_object:
    file_object.write(' '+checkDate)

#求日期差演算法
def days(str1,str2):
    date1=datetime.datetime.strptime(str1[0:10],"%Y-%m-%d")
    date2=datetime.datetime.strptime(str2[0:10],"%Y-%m-%d")
    num=(date1-date2).days
    return num

#判斷打魚還是曬網演算法
def check(num):
    num=num%5
    if num in range(1,4,1):
        return True
    else:
        return False

#核心演算法
with open(filename) as file_object:
    contents=file_object.read()
    s1 = re.split(' ', contents)  # 利用正則函式進行分割
    #讀取第一個數20100101和最後一個要查的數並將其轉換為date資料型別
    begin=s1[0]
    begin=begin[0:4]+'-'+begin[5:6]+'-'+begin[7:8]
    last=s1[len(s1)-1]
    last=last[0:4]+'-'+last[5:6]+'-'+last[7:8]
    #呼叫days函式求出兩日期之間所差天數
    nums=days(last,begin)
    #根據所差天數得到結果
    Result=check(nums)

#將結果寫入out.txt檔案中,其中True表示打魚,False表示曬網
with open(recordname,'a') as file_object:
    file_object.write(str(Result)+' ')

相關文章