2015-09-16 72 views
0

從這個卡塔攝於codewars:Python Kata那是什麼樣的回報?

我有一個瘋狂的精神病。我很不喜歡數字。但它是一個有點複雜:我擔心的數目取決於哪一週的一天,它是......這是我的精神疾病的具體描述:

週一 - > 12

週二 - >數大於95

星期三 - > 34

星期四 - > 0

星期五 - >號通過divisable 2

星期六 - > 56

週日 - > 666或-666

寫函數,它接受一個字符串(星期)和一個整數(被測試號),所以它告訴醫生,如果我是否擔心。 (返回一個布爾值)

和這樣的回答:

def am_I_afraid(day,num): 
return { 
    'Monday': num == 12, 
    'Tuesday': num > 95, 
    'Wednesday': num == 34, 
    'Thursday': num == 0, 
    'Friday': num % 2 == 0, 
    'Saturday': num == 56, 
    'Sunday': num == 666 or num == -666, 
}[day] 

可能有人請幫助我明白怎麼回的作品? (內部)

返回的內容是在處理之前分配的嗎?

+0

你的問題到底是什麼?你在問代碼是如何工作的? –

+1

它只是在temp字典中返回由'day'索引的值。 – imreal

+1

@Onilol評估所有值,然後通過鍵檢索一個 – Hacketo

回答

0

代碼運行和評估反過來每一行,所以給你會得到的散列666的輸入:

{'Monday': False, 
    'Tuesday': True, 
    'Wednesday': False, 
    'Thursday': False, 
    'Friday': True, 
    'Saturday': False, 
    'Sunday': True, 
} 

然後[day]將採摘從的哈希值,並返回布爾值,所以如果Wednesday通過,你會得到False。如果Friday通過,您將獲得True。即

{'Monday': False, 
     'Tuesday': True, 
     'Wednesday': False, 
     'Thursday': False, 
     'Friday': True, 
     'Saturday': False, 
     'Sunday': True, 
    }['Friday'] 

將獲得哈希值:{'Friday': True}和返回值True

+0

您是否介意擴展哈希概念? – Onilol

+0

哈希是一個關鍵/值的配對。又名詞典 – Yule

+1

Python字典是一個哈希映射(如果你感興趣的話可以查看它),但是形式上的「哈希」是從鍵計算出來的一些整數值,並且像索引一樣使用 - 它不是鍵值找到使用該散列的對。 – Useless

0

那麼這是一個字符串和布爾值的字典。每次根據傳遞給它的數字調用此方法時,它都會計算一週中所有星期幾的布爾值。然後在最後它將字典索引爲已過去的日期並返回它的值。

+0

因此,它評估每個'key'的'value'並返回匹配的值? – Onilol

+0

它計算一週中所有日子的值,然後將您傳遞給它的特定日期的值作爲輸入返回 – Amr

3

這將建立一個字典,每週的每一天作爲一個關鍵。這本字典是這樣的(假設我通過num10的值)(記得字典是無序的)

{'Friday': True, 
'Monday': False, 
'Saturday': False, 
'Sunday': False, 
'Thursday': False, 
'Tuesday': False, 
'Wednesday': False} 

它是什麼做的是評估與num每個表達式:

num == 12 # False 
num > 95 # False 
num == 34 # False 
num == 0 # False 
num % 2 == 0 # True 
num == 56 # False 
num == 666 or num == -666 # False 

最後,它是使用傳遞的day僅返回字典中該鍵的值。

因此,如果您通過Friday10,您將收到True。對於每隔一天和值10你會得到False

0

詞典文字(和所有其他對象文字)可用於所有相同的方式作爲該類型的任何其他對象。也就是說,這樣的:

def am_I_afraid(day,num): 
    return { 
     'Monday': num == 12, 
     'Tuesday': num > 95, 
     'Wednesday': num == 34, 
     'Thursday': num == 0, 
     'Friday': num % 2 == 0, 
     'Saturday': num == 56, 
     'Sunday': num == 666 or num == -666, 
    }[day] 

是完全等價的:

def am_I_afraid(day,num): 
    my_dict = { 
     'Monday': num == 12, 
     'Tuesday': num > 95, 
     'Wednesday': num == 34, 
     'Thursday': num == 0, 
     'Friday': num % 2 == 0, 
     'Saturday': num == 56, 
     'Sunday': num == 666 or num == -666, 
    } 
    return my_dict[day] 

使用這樣的字典是一個偶爾見過替代其它語言中看到了「情況」的聲明。它本質上是寫一系列的if S,這樣的「手短」的方式:

if day == 'Monday': 
    return num == 12 
elif day == 'Tuesday': 
    return num > 95 
elif day == 'Wednesday': 
    return num == 34 

等。