2017-05-08 103 views
-1

所以我剛開始學習python,試圖製作一個程序,告訴你在某一天的某一天。我發現datetime並試圖使用它,但問題是即使密鑰存在,我也會得到關鍵錯誤。如何從Python的Datetime對象中查找星期幾名稱?

這裏是我的代碼:

import datetime 

def day_finder(dd,mm,yy): 

    tags = { '1' : 'Monday' ,'2' : 'Tuesday' ,'3' : 'Wednesday' ,'4' : 'Thursday' ,'5' : 'Friday' ,'6' : 'Saturday' ,'7' : 'Sunday' } 
    return tags[int(datetime.datetime(yy,mm,dd).isoweekday())] 


d = int(input("Enter a date")) 
m = int(input("Enter a month")) 
y = int(input("Enter a year")) 

print (day_finder(d,m,y)) 
+2

您正在將一週的時間轉換爲int,其中字典的鍵明顯是字符串。這就是爲什麼錯誤 – kuro

+0

最簡單的方法是隻使用input()而不是int(input()) – bigbounty

+0

如果我使用input()它會給類型錯誤 –

回答

3

您正在搜索的int平日數量,而是你應該爲字符串,因爲在你的字典鍵是str類型進行檢查。例如:

>>> tags = { '1' : 'Monday' ,'2' : 'Tuesday' ,'3' : 'Wednesday' ,'4' : 'Thursday' ,'5' : 'Friday' ,'6' : 'Saturday' ,'7' : 'Sunday' } 

>>> import datetime 
>>> tags[str(datetime.datetime(1990,03,28).isoweekday())] 
'Wednesday' 

但是,你並不需要一個dict對象來獲取基於密鑰日數星期名稱。您可以通過datetime對象上使用.strftime('%A')爲得到期望的結果:

>>> datetime.datetime(1990,03,28).strftime("%A") 
'Wednesday' 
0

tags對象keysstr值,但將它們轉換爲int(他們已經是),然後嘗試訪問值int價值,這就是爲什麼你得到KeyError

修復會將它們轉換爲str,並且一切都會正常工作。

return tags[str(datetime.datetime(yy,mm,dd).isoweekday())] 
0

isoweekday返回一個整數。你的字典的鍵是字符串。

你不需要對結果調用int,因爲它已經是一個int了 - 或者用str代替它,或者用整數作爲你的字典的鍵。

+0

如果我在字典中刪除''會將它們變成整數? –

+0

是的,刪除(「)將爲您工作。 – mangupt

0

嘗試查找字符串不是整數。

return tags[str(datetime.datetime(yy,mm,dd).isoweekday())] 
相關問題