Python計算指定日期是今年的第幾天(三種方法)
今天早上和騰訊面試官進(jìn)行了視頻面試,由于音量和網(wǎng)絡(luò)以及我的垃圾電腦的原因,個人感覺黃了...
最后面試官給了我一道簡單的計算題:指定日期是今年的第幾年
由于電腦卡到打字都打不動,我勉勉強(qiáng)強(qiáng)寫了一點,雖然面試官知道了我的想法也了解我的設(shè)備情況,最后沒讓我寫完
但是心里慚愧還是時候補(bǔ)齊了...話不多說回到主題吧
首先是輸入的問題,個人認(rèn)為分別輸入年月份是一件很初級的要求,就實現(xiàn)了形如“2020-3-26”的字符串解析的兩種方法,代碼如下:
def cal_date_str_spilt(date): '''' 處理形如"2020-3-26" 使用字符串的spilt方法解析 ''' _year = int(date.split('-')[0]) _month = int(date.split('-')[1]) _day = int(date.split('-')[2]) return [_year, _month, _day] def cal_date_str_time(date): ''' 使用time庫內(nèi)置函數(shù)strptime(string, format) return struct_time對象 傳入?yún)?shù):字符串 + 處理格式 ''' _date = time.strptime(date, '%Y-%m-%d') _year = _date.tm_year _month = _date.tm_mon _day = _date.tm_mday return [_year, _month, _day]
然后判斷是否閏年
def judge_leap_year(year, month): # 只有閏年且月份大于2月才加多一天 if year % 400 == 0 or year % 100 and year % 4 == 0 and month > 2: return 1 else: return 0
主函數(shù)
def main(): date = input("請輸入日期,以'-'分隔:") sum_1, sum_2 = 0, 0 date_list_1 = cal_date_str_spilt(date) date_list_2 = cal_date_str_time(date) month_day = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] month_day_lep = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] sum_1 += sum(month_day[:date_list_1[1] - 1]) + date_list_1[2] + judge_leap_year(date_list_1[0], date_list_1[1]) sum_2 += sum(month_day[:date_list_2[1] - 1]) + date_list_2[2] + judge_leap_year(date_list_2[0], date_list_2[1]) print('今天是今年的第' + str(sum_1) + '天') print('今天是今年的第' + str(sum_2) + '天') ''' 這一段是使用了datetime庫的方法,python本身就有處理該類問題的方法 ''' _sum = datetime.date(date_list_1[0], date_list_1[1], date_list_1[2]) sum_3 = _sum.strftime('%j') if sum_3[0] == '0' and sum_3[1] == '0': print('今天是今年的第' + str(sum_3[-1:]) + '天') elif sum_3[0] == '0': print('今天是今年的第' + str(sum_3[-2:]) + '天') else: print('今天是今年的第' + str(sum_3) + '天') if __name__ == '__main__': main()
以下是全部代碼:
import datetime import time def cal_date_str_spilt(date): '''' 處理形如"2020-3-26" 使用字符串的spilt方法解析 ''' _year = int(date.split('-')[0]) _month = int(date.split('-')[1]) _day = int(date.split('-')[2]) return [_year, _month, _day] def cal_date_str_time(date): ''' 使用time庫內(nèi)置函數(shù)strptime(string, format) return struct_time對象 傳入?yún)?shù):字符串 + 處理格式 ''' _date = time.strptime(date, '%Y-%m-%d') _year = _date.tm_year _month = _date.tm_mon _day = _date.tm_mday return [_year, _month, _day] def judge_leap_year(year, month): # 只有閏年且月份大于2月才加多一天 if year % 400 == 0 or year % 100 and year % 4 == 0 and month > 2: return 1 else: return 0 def main(): date = input("請輸入日期,以'-'分隔:") sum_1, sum_2 = 0, 0 date_list_1 = cal_date_str_spilt(date) date_list_2 = cal_date_str_time(date) month_day = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] month_day_lep = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] sum_1 += sum(month_day[:date_list_1[1] - 1]) + date_list_1[2] + judge_leap_year(date_list_1[0], date_list_1[1]) sum_2 += sum(month_day[:date_list_2[1] - 1]) + date_list_2[2] + judge_leap_year(date_list_2[0], date_list_2[1]) print('今天是今年的第' + str(sum_1) + '天') print('今天是今年的第' + str(sum_2) + '天') ''' 這一段是使用了datetime庫的方法,python本身就有處理該類問題的方法 ''' _sum = datetime.date(date_list_1[0], date_list_1[1], date_list_1[2]) sum_3 = _sum.strftime('%j') if sum_3[0] == '0' and sum_3[1] == '0': print('今天是今年的第' + str(sum_3[-1:]) + '天') elif sum_3[0] == '0': print('今天是今年的第' + str(sum_3[-2:]) + '天') else: print('今天是今年的第' + str(sum_3) + '天') if __name__ == '__main__': main()
總結(jié)
到此這篇關(guān)于Python三種方法計算指定日期是今年的第幾天的文章就介紹到這了,更多相關(guān)python計算指定日期是今年第幾天內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Python實現(xiàn)一個簡單的注冊機(jī)并生成卡密
這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫一個簡單而強(qiáng)大的注冊機(jī),生成卡密來實現(xiàn)用戶注冊,從而輕松登錄應(yīng)用程序,有需要的小伙伴快可以參考下2023-12-12python實現(xiàn)三種字符串格式化方法(%、format、f-string)
本文主要介紹了python實現(xiàn)三種字符串格式化方法,主要包括%、format、f-string,具有一定的參考價值,感興趣的可以了解一下2023-10-10Python中subprocess介紹及如何使用詳細(xì)講解
在實際開發(fā)過程中,我們經(jīng)常會遇到需要從Python腳本中調(diào)用外部程序或腳本的場景,下面這篇文章主要給大家介紹了關(guān)于Python中subprocess介紹及如何使用詳細(xì)講解的相關(guān)資料,需要的朋友可以參考下2024-09-09Flask框架 CSRF 保護(hù)實現(xiàn)方法詳解
這篇文章主要介紹了Flask框架 CSRF 保護(hù)實現(xiàn)方法,結(jié)合實例形式詳細(xì)分析了Flask-WTF針對CSRF攻擊的防護(hù)相關(guān)操作技巧,需要的朋友可以參考下2019-10-10深入理解Python虛擬機(jī)中列表(list)的實現(xiàn)原理及源碼剖析
在本篇文章當(dāng)中主要給大家介紹?cpython?虛擬機(jī)當(dāng)中針對列表的實現(xiàn),在?Python?中,List?是一種非常常用的數(shù)據(jù)類型,可以存儲任何類型的數(shù)據(jù),并且支持各種操作,如添加、刪除、查找、切片等,在本篇文章當(dāng)中將深入去分析這一點是如何實現(xiàn)的2023-03-03詳解用python -m http.server搭一個簡易的本地局域網(wǎng)
這篇文章主要介紹了詳解用python -m http.server搭一個簡易的本地局域網(wǎng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09python簡單實現(xiàn)整數(shù)反轉(zhuǎn)的畫解算法
這篇文章主要介紹了python簡單實現(xiàn)整數(shù)反轉(zhuǎn)采用了一個有趣的畫解算法,通過示例的題目描述來對問題分析進(jìn)行方案的解決,有需要的朋友可以參考下2021-08-08