Logic 这是RubyMonk上的错误还是我逻辑思维中的缺陷?

Logic 这是RubyMonk上的错误还是我逻辑思维中的缺陷?,logic,Logic,我正在Rubymonk.com学习Ruby 以下是项目说明: 雇佣程序员-Ruby中的布尔表达式 让我们假设你正在为你的新公司招募团队成员!给定一个候选人,你需要一个表达式来告诉你他们是否适合某些类型。这是候选对象的外观: candidate.years_of_experience = 4 candidate.github_points = 293 candidate.languages_worked_with = ['C', 'Ruby', 'Python', 'Clojure'] candi

我正在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岁以下的候选人。我们也不想考虑最近申请这个职位的候选人。

基于以上描述,我得出结论,以下所列项目必须是真实的:

  • 候选人。你使用过的语言。包括:(“Ruby”)
  • candidate.years_of_experience>=2 | | candidate.github_points>=500
  • 候选人年龄>15岁
  • candidate.applicated_最近?==假的
  • 我的回答是:

    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?)
    
    但答案是:

    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岁,而且最近还没有申请过


    他们不一样吗?还是我的逻辑有缺陷

    几乎一样,你唯一缺少的是>=

    (candidate.age >= 15) && !(candidate_applied_recently?)
    
    这就是为什么你可能会得到错误的答案


    希望能有所帮助。

    我认为RubyMonk上的项目的测试逻辑有问题: 当我使用下面的代码时,我通过了测试:

    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)
    
    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.applied_recently? && (candidate.age > 15)
    
    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?)
    
    所以

    不同于

    (candidate.age > 15) && !(candidate.applied_recently?)
    

    在鲁比蒙的脑海里

    几乎相同<代码>15既不在
    15
    之下,也不在
    15
    之上。将
    更改为
    =
    使它们等效。瞧,谢谢你,伦佐,你的意思是“(candidate.age>=15)和&!(最近申请的?)相当于“!(candidate.age<15 | | | | | candidate.applicated|u最近?)非常有趣,当我编写这样的代码时,我通过了测试:“是有经验的ruby|u程序员吗?”(candidate.years|u经验>=2 | candidate.github|points>=500)&(candidate.languages||||你使用过的语言包括?'Rub!候选者最近申请了&&(candidate.age>15岁)“谢谢。我试过了,但结果和我的代码一样。我怀疑这是RubyMonk检查代码时的一个错误,如果它在逻辑上没有任何区别的话。RubyMonk可能是检查代码而不是测试输出。