Автор оригинала: Robin Andrews.
В этом Python Coding Code Challenge Ваша цель – реализовать оператор модуля ( % ) для себя, без использования подразделения или % сам оператор. Мы будем рассматривать только позитивные целые числа здесь, хотя, хотя всеми средствами идут вперед и создать версию, которая может обрабатывать негативные.
Иногда цель состоит в том, чтобы получить что-то сделать, и поэтому мы используем существующие инструменты, доступные для этого, но в других случаях цель – это отличается – возможно, мы хотим понять что-то лучшее, или даже просто наслаждаться острым ощущением решения проблемы для себя, Зная, что при этом мы добавляем в нашу личную базу данных опыта, что делает нас лучшими программистами.
Сегодняшняя проблема заключается в реализации Оператор по модулю Как будто он уже не существует.
Оператор Modulo используется в программировании Python, когда вам нужно найти оставшуюся часть целочисленного подразделения. Это подходит во многих важных алгоритмах и представлена символом % Отказ % Оператор дает результат деления числа слева от символа по номеру справа и сохраняя остаток.
Для подробного урока на модульском операторе, в комплекте с кодом Python, рабочими листами и решениями, проверьте мой ресурс оператора Modulo.
- Урок эксплуатации модуля и рабочий лист £ 12,00 купить сейчас
Прежде чем застрять в раствор в Python, может быть хорошая идея, чтобы вы действительно понять, как оператор модуля работает, пробуя несколько примеров на бумаге. Затем внимательно подумайте о своем плане атаки, возможно, сделав несколько баллов/пулевых пунктов.
Оператор Python Modulo Challenge
Вот острую и некоторые основные тесты, чтобы начать работу, как только вы думаете, что вы готовы реализовать ваше решение в Python:
def modulo2(a, b):
"""
Returns a % b without using division or modulo operator.
a, b must be integers. a must be >= 0 and b must be > 0.
"""
pass
assert modulo2(20, 6) == 2
assert modulo2(0, 6) == 0
assert modulo2(123, 10) == 3
Решение оператора Python Modulo
Вот потенциальное решение. Ваш вполне может быть совсем другим, но если он пройдет тесты, это, вероятно, в порядке (хотя, конечно, стоит добавить еще несколько тестов).
def modulo2(a, b):
"""
Returns a % b without using division or modulo operator.
a, b must be integers. a must be >= 0 and b must be > 0.
"""
while a >= b:
a -= b
print(f"a: {a}, b: {b}") # For debugging
return a
Улучшение решения
Одна вещь, которую мы можем сделать, чтобы улучшить решение, это добавить некоторую проверку. С А и B должны быть целыми числами и А должно быть > = 0 и B должно быть > 0 Мы можем изменить программу для повышения ошибки, если эти условия не выполнены. Однако использование простых утверждающих утверждений больше не является вариантом для тестирования этого типа ввода.
def modulo2(a, b):
"""
Returns a % b without using division or modulo operator.
a, b must be integers. a must be >= 0 and b must be > 0.
"""
if not(type(a) is int and type(b) is int):
raise ValueError("a and b must both be integers.")
if not(a >= 0 and b > 0):
raise ValueError("a must be >= 0 and b must be > 0.")
return False
while a >= b:
a -= b
print(f"a: {a}, b: {b}") # For debugging
return a
assert modulo2(20, 6) == 2
assert modulo2(0, 6) == 0
assert modulo2(123, 10) == 3
# Testing for ValueError requires a testing framework
print(modulo2(-10, 2)) # Expect ValueError
Я надеюсь, что вы нашли эту проблему интересным. Счастливые вычисления!