【发布时间】:2016-01-28 06:19:07
【问题描述】:
我正在通过 Rubymonk.com 学习 Ruby
以下是项目描述:
招聘程序员 - Ruby 中的布尔表达式
假设您正在为您的新创业公司招募团队成员!给定一个候选人,您需要一个表达式来告诉您他们是否适合某些类型。这是候选对象的外观:
candidate.years_of_experience = 4
candidate.github_points = 293
candidate.languages_worked_with = ['C', 'Ruby', 'Python', 'Clojure']
candidate.applied_recently? = false
candidate.age = 26
我们正在招聘经验丰富的 Ruby 程序员。我们理想的候选人有 2 年或以上的经验,但有些程序员甚至在此之前就变得非常优秀。我们会考虑他们的 Github 积分(一个优秀程序员的一个很好的指标),即使他们没有经验,拥有 500 Github 积分或更多的候选人也可以申请。还有一个问题:Ruby 是一门很酷且很棒的语言,很多聪明的年轻人都非常擅长它。我们爱那些孩子,但对于这项特殊的工作,我们宁愿让他们在学校学习而不是工作。让我们过滤掉 15 岁以下的候选人。另外,我们不想考虑最近申请此职位空缺的候选人。
根据以上描述,我得出以下结论一定是真的:
- candidate.languages_worked_with.include?('Ruby')
- candidate.years_of_exprience >= 2 ||候选人.github_points >= 500
- candidate.age > 15
- candidate.applied_recently? == 错误
我的答案是:
is_an_experienced_programmer = (candidate.years_of_exprience >= 2
|| candidate.github_points >= 500) && candidate.languages_worked_with.include? 'Ruby'
&& (candidate.age > 15) && !(candidate.applied_recently?)
然后答案是:
is_an_experienced_ruby_programmer = (candidate.years_of_experience >= 2
|| candidate.github_points >= 500) && (candidate.languages_worked_with.include? 'Ruby')
&& ! (candidate.age < 15 || candidate.applied_recently?)
我的答案和答案的唯一区别是:
(candidate.age > 15) && !(candidate.applied_recently?)
上面说候选人必须年满 15 岁并且最近没有申请。
以及答案:
! (candidate.age < 15 || candidate.applied_recently?)
上面的代码基本上是说,候选人不能低于15岁并且最近没有申请。
它们不一样吗?还是我的逻辑有缺陷?
【问题讨论】:
-
几乎一样;
15既不在15之下,也不在15之上。将>更改为>=使它们等效。见De Morgan's Laws。 -
谢谢,Renzo,你的意思是 '(candidate.age >= 15) && !(candidate.applied_recently?)' 相当于'! (candidate.age
-
有趣的是,当我编写这样的代码时,我通过了测试:'is_an_experienced_ruby_programmer = (candidate.years_of_experience >= 2 || Candidate.github_points >= 500) && (candidate.languages_worked_with.include ? 'Ruby') && !candidate.applied_recently? && (candidate.age > 15)'
标签: logic