回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在做以下编程练习:<a href="https://www.codewars.com/kata/5e65916b4696e500134987e1" rel="nofollow noreferrer">No musical</a>。声明如下:</p>
<blockquote>
<p>In my school, a grand musical is performed every 4 years. This means
that every student who comes to this school will get to see a musical
performed exactly once in their 4-year stay. This is not always the
case in other schools though.</p>
<p>For a given duration of time, an interval after which a musical is
performed, and the duration of class enrolment, can you determine how
many class-years did not get to have a musical performed in their
school? A musical is always performed for the start_class.</p>
<p>Example:</p>
<p>no_musical(start_class = 2000, end_class = 2010,<br/>
musical_performed_every = 5, duration_of_enrolment_in_school = 3) = 4 </p>
<p>Explanation: Only the class of 2000 gets to see the musical performed
in 2000. The next musical will be in 2005 so only the class of 2003 in
their last year, 2004 in their second year, and 2005 in their first
year, get to see it. The next musical will be in 2010 so only the
class of 2008, 2009 and 2010 get to see it. This leaves us with the
class of 2001, 2002, 2006 and 2007 who never get to see a musical, a
total of 4 classes :(</p>
<p>TO NOTE:</p>
<pre><code>In this kata, if duration of enrolment in school is, say, 4 years, members of a class that starts in 2000 will graduate in 2003, not
</code></pre>
<p>2004. Their years of enrolment in the school would be 2000, 2001, 2002 and 2003. (In the standard way that we are used to the term 'class
of', they would be the class of 1999 as they would graduate in 2003,
but we do not do that here)
As seen in the example, the range is end-inclusive. The last class should also be accounted for.
Very minor note, we assume all the students in the school will actually go to watch the musical - not that it matters for this kata
anyway. That said, I am not really a musical person :-(</p>
<p>5 sample tests, 50 randomized tests.</p>
<p>Good luck.</p>
</blockquote>
<p>我们编写了以下Python代码:</p>
<pre><code>import math
def no_musical(start_class, end_class, musical_performed_every, enrolment_duration):
print("start_class: ",start_class)
print("end_class: ",end_class)
print("musical_performed_every: ",musical_performed_every)
print("enrolment_duration: ",enrolment_duration)
if(start_class>=end_class): return 0
if(musical_performed_every==0): return end_class-start_class+1
if(enrolment_duration>musical_performed_every): return 0
allCourses=end_class-start_class
print("allCourses: ",allCourses)
numberOfMusicals=math.ceil((allCourses)/musical_performed_every)
print("numberOfMusicals: ",numberOfMusicals)
coursesWhichSeeMusical=numberOfMusicals*enrolment_duration
print("coursesWhichSeeMusical: ",coursesWhichSeeMusical)
coursesWhichNotSeeMusical=allCourses-coursesWhichSeeMusical
return 0 if coursesWhichNotSeeMusical<0 else coursesWhichNotSeeMusical
</code></pre>
<p>有三个测试我们的代码没有给出预期的输出:</p>
<pre><code># Use test.describe (or Test.describe) to describe your test suite
test.describe("Musicals")
# What if the start and end year are the same?
test.assert_equals(no_musical(2000,2000,100,3), 0)
# What if the school does not do musicals?
test.assert_equals(no_musical(2000,3000,0,50), 1001)
# What if all the students get to see musicals?
test.assert_equals(no_musical(2000,2020,2,4), 0)
# But are you doing it right though?
test.assert_equals(no_musical(2000, 3000, 5, 2), 600)
test.assert_equals(no_musical(2000, 2010, 5, 3), 4)
#our code fails in this test, by 1 year
test.assert_equals(no_musical(2910, 3505, 4, 3), 149)
#our code fails in this test, by 2 years
test.assert_equals(no_musical(2483, 3309, 18, 2), 736)
#our code fails in this test, by 4 years
test.assert_equals(no_musical(2969, 3508, 17, 4), 415)
</code></pre>
<p>我们在最后三次测试中观察到以下痕迹:</p>
<p>开始上课:2910
完班:3505
音乐剧每四点演出一次
入学时间:3
所有课程:595
音乐剧数目:149
音乐类课程:447
148应该等于149</p>
<p>起始班:2483
完班:3309
音乐剧表演时间:18
入学时间:2
所有课程:826
音乐剧数量:46部
音乐类课程:92门
734应该等于736</p>
<p>起始班:2969
完班:3508
音乐剧表演时间:17
入学时间:4
所有课程:539
音乐剧数量:32部
音乐类课程:128门
411应等于415</p>
<p>我们读到:</p>
<ul>
<li><p><a href="https://stackoverflow.com/questions/50812731/calculate-years-months-days-between-2-dates">Calculate years + months + days between 2 dates?</a></p></li>
<li><p><a href="https://stackoverflow.com/questions/12564077/calculate-the-difference-between-two-datetime-date-dates-in-years-and-months">calculate the difference between two datetime.date() dates in years and months</a></p></li>
</ul>
<p>我们如何调试这段代码</p>