在代码表中使用此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]
有人可以帮助我了解返回的工作原理吗? (内脏)
在处理之前是否分配了返回的内容?
答案 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
仅返回字典中该键的值。
因此,如果您通过Friday
和10
,则会收到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
等等。