那是什么样的回报?

时间:2015-09-16 14:33:29

标签: python

在代码表中使用此kata:Python Kata

  

我有一种疯狂的精神疾病。我不喜欢数字。但它有点复杂:我担心的数字取决于它的星期几......这是我精神疾病的具体描述:

     

星期一 - > 12

     

星期二 - >数字大于95

     

星期三 - > 34

     周四 - > 0

     

星期五 - >可分为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]

有人可以帮助我了解返回的工作原理吗? (内脏)

在处理之前是否分配了返回的内容?

4 个答案:

答案 0 :(得分:3)

这会构建一个字典,将每周的每一天作为关键字。字典看起来像这样(假设我传递num的值为10)(记住字典是无序的)

{'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

答案 1 :(得分:0)

这是一个字符串和布尔值的字典。每次根据传递给它的数字调用此方法时,它会计算一周中所有日期的布尔值。然后在最后它将字典索引为过去的日期并返回其值。

答案 2 :(得分: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

答案 3 :(得分: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]

使用这样的词典偶尔会看到" case"用其他语言看的陈述。它本质上是一个“短手”'编写一系列if的方法,如下所示:

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

等等。