我在exercism.io上做了一些练习,对于当前的练习,我们需要实现我们自己的闰年类(忽略Ruby内置的特性)。测试是提供的,我很难让所有的测试都通过。
总之,闰年是任何可以被4整除的年份,除非该年可以被100整除,除非它也可以被400整除。到目前为止,我的情况如下:
class Year
def self.leap?(year)
if (year % 400 == 0 && year % 100 == 0) || (year % 100 != 0 && year % 4 == 0)
return "Yes, #{year} is a leap year"
else
return "No, #{year} is not a leap year"
end
end
end失败的是1900年、1997年和1998年的考试。这不是一个很大的文件,下面是测试装置:
class YearTest < Minitest::Test
def test_leap_year
assert Year.leap?(1996), 'Yes, 1996 is a leap year'
end
def test_non_leap_year
refute Year.leap?(1997), 'No, 1997 is not a leap year'
end
def test_non_leap_even_year
refute Year.leap?(1998), 'No, 1998 is not a leap year'
end
def test_century
refute Year.leap?(1900), 'No, 1900 is not a leap year'
end
def test_fourth_century
assert Year.leap?(2400), 'Yes, 2400 is a leap year'
end
end我不完全相信我的逻辑是合理的,所以任何帮助都将是非常感谢的。
发布于 2015-07-02 11:59:41
问题是Year.leap?应该返回true或false,而不是根据您的测试返回字符串。
class Year
def self.leap?(year)
(year % 400 == 0 && year % 100 == 0) || (year % 100 != 0 && year % 4 == 0)
end
end你的测试现在就要通过了。
assert正在寻找一个真实的回应,refute正在寻找一个虚假的回应。
我们本可以把原始代码保留得更完整,但是说.
if (condition_to_test) == true
return true
else
return false
end更简洁地呈现为
condition_to_test它将酌情自动返回true或false。
发布于 2015-07-02 11:52:30
class Year
def self.leap?(year)
return "Yes, #{year} is a leap year" if (year % 400).zero?
return "No, #{year} is not a leap year" if (year % 100).zero?
return "Yes, #{year} is a leap year" if (year % 4).zero?
return "No, #{year} is not a leap year"
end
end或
class Year
def self.leap?(year)
yes, no = "Yes, #{year} is a leap year", "No, #{year} is not a leap year"
return yes if (year % 400).zero?
return no if (year % 100).zero?
return yes if (year % 4).zero?
return no
end
end发布于 2015-07-02 11:50:58
按照您的描述,它应该如下所示
if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)
return "Yes, #{year} is a leap year"
else
return "No, #{year} is not a leap year"
endhttps://stackoverflow.com/questions/31183631
复制相似问题