Вокруг пространства есть очень популярная проблема, известная как проблема Fizzbuzz. В этой проблеме мы должны сделать, это мы должны обратно через 1 до n. и везде, где мы сталкиваемся с целым числом, делимым на 3, нам нужно распечатать Fizz
С И всякий раз, когда мы сталкиваемся с целым числом, делимым на 5, нам нужно распечатать Buzz
& и и «Fizzbuzz», если целое число делится как на 3 и 5. Fizzbuzz – очень простая задача программирования, используемая в собеседователях разработчиков программного обеспечения, чтобы определить, может ли кандидат работы на самом деле записать код. Он был изобретен Имранском горе и популяризирован Джеффом Этвудом.
Так что делает это хорошей проблемой …
То есть если программист пишет
def FizzBuzz(): for i in range(1, 100): if i == 0: continue elif i % 15 == 0: print('FizzBuzz') elif i % 5 == 0: print('Buzz') elif i % 3 == 0: print('Fizz') else: print(i)
Это делает работу печати решения. Но вот поймать …
Оператор Modulo (%) является тяжелым оператором и работает по-другому. Если мы говорим Я% 15
Означает его как I% 5 && I% 3
Отказ Следовательно, если мы выступаем Я% 15
В программе Fizzbuzz мы выполняем I% 5
операция дважды.
Итак, чтобы иметь дело с этим некоторые программисты подходят к этой проблеме по-другому.
Их подход
def FizzBuzz(): f = False d = "" for i in range(1, 10000): if i % 3 == 0: d += 'Fizz' f = True if i % 5 == 0: d += 'Buzz' f = True if f != True: print(i) else: print(d) d = "" f = False
Здесь они только проверяют Я% 3
& I% 5
только один раз и добавьте строку «Fizz» и «Buzz» в пустую строку. И в конце он просто печатает номер или конечную строку.
Этот подход снижает время обработки, но он увеличивает потребление памяти.
Последний подход, который редко …
def FizzBuzz(): c3 = 0 c5 = 0 d = "" b = False for num in range(1, 10000): c3 += 1 c5 += 1 if c3 == 3: d += "fizz" c3 = 0 b = True if c5 == 5: d += "buzz" c5 = 0 b = True if b == True: print(d) d = "" b = False else: print(num)
Вот в этом подходе нет (%) операторов модульных операторов. Следовательно, это уменьшает время обработки кода.
Тестирование
Чтобы проверить эту теорию, я внедрил функцию времени Pythons, и к моему удивлению. Между первым и последним кодом была неопределенная разница во времени.
Результаты времени следующие …
На 100 записей
- Первая версия 0,0005862250000000027.
- Вторая версия 0,00024850499999961
- Третья версия 0.001852885999999998
Для 10000 записей
- Первая версия 0.117162348.
- Вторая версия 0.188121156.
- Третья версия 0.401831502.
Если вы застряли где угодно, оставьте комментарий. Следуй за мной в Twitter в Twitter/Pranjaljain0 Следуй за мной на Github в github/pranjaljain0.
Перейти к этому цику для полного кода
Счастливый взлом!
Оригинал: “https://dev.to/pranjaljain0/the-fizzbuzz-problem-5ih”