Я делаю следующее упражнение по программированию: Нет музыки . Утверждение таково:
В моей школе великий мюзикл исполняется каждые 4 года. Это означает, что каждый ученик, пришедший в эту школу, увидит мюзикл, исполненный ровно один раз за 4 года обучения. Однако в других школах это не всегда так.
За определенный промежуток времени, интервал, после которого исполняется мюзикл, и продолжительность зачисления в класс, вы можете определить, сколько лет в классе не было получить мюзикл в своей школе? Мюзикл всегда исполняется для начального класса.
Пример:
no_musical (start_class = 2000, end_class = 2010,
artistic_performed_every = 5, duration_of_enrolment_in_school = 3) = 4
Объяснение: Только класс 2000 сможет увидеть мюзикл, исполненный в 2000 году. Следующий мюзикл будет в 2005 году, поэтому только класс 2003 года за последний год, 2004 год - за второй год, а 2005 год - за первый год. чтобы увидеть это. Следующий мюзикл будет в 2010 году, так что его увидят только классы 2008, 2009 и 2010 годов. Это оставляет нас с классом 2001, 2002, 2006 и 2007 годов, которые никогда не увидят мюзикл, всего 4 класса: (
ВНИМАНИЕ:
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
2004. Их количество лет зачисления в школу будет 2000, 2001, 2002 и 2003 гг. (стандартным способом, которым мы привыкли к термину «класс»), это будет класс 1999 г., который они закончили в 2003 г., но мы делаем не делайте этого здесь) Как видно из примера, диапазон является конечным. Последний класс также должен быть учтен. Очень незначительное замечание, мы предполагаем, что все ученики в школе на самом деле go будут смотреть мюзикл - не что это важно для этого ката. Тем не менее, я не очень музыкальный человек: - (
5 выборочных тестов, 50 рандомизированных тестов.
Удачи.
Мы написали следующий Python код:
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
И есть три теста, в которых наш код не дает ожидаемого результата:
# 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)
Мы наблюдаем в последние три теста следующие след:
начало _класс: 2910 конец_класса: 3505 : 92 734 должно равняться 736
start_class: 2969 end_class: 3508 music_performed_every: 17 enrolment_duration: 4 allCourses: 539 numberOfMusicals: 32 курсовКоторыеSeeMusical: 128 411 должны равняться 415
Мы прочитали:
1042 *
Рассчитать годы + месяцы + дни между двумя датами?
вычислить разницу между двумя datetime.date () даты в годах и месяцах
Как мы можем отладить этот код?‽