Python: Возврат из циклов
Работа с циклами обычно сводится к двум сценариям:
- Агрегация. Накопление результата во время итераций и работа с ним после цикла. Переворот строки относится к такому варианту
- Выполнение цикла до достижения необходимого результата и выход. Например, задача поиска простых чисел — которые делятся без остатка только на себя и на единицу
Рассмотрим алгоритм проверки простоты числа. Будем делить искомое число x
на все числа из диапазона от двух до x - 1
и смотреть остаток. Если в этом диапазоне не найден делитель, который делит число x
без остатка, значит, перед нами простое число.
В этом случае достаточно проверять числа не до x - 1
, а до половины числа. Например, 11 не делится на 2, 3, 4, 5. Но и дальше не будет делиться на числа больше своей половины. Значит, можно оптимизировать алгоритм и проверять деление только до x / 2
:
def is_prime(number):
if number < 2:
return False
divider = 2
while divider <= number / 2:
if number % divider == 0:
return False
divider += 1
return True
print(is_prime(1)) # => False
print(is_prime(2)) # => True
print(is_prime(3)) # => True
print(is_prime(4)) # => False
Если быть честными до конца, то для решения задачи хватит проверки чисел до значения квадратного корня number
, но в нашем случае важно сосредоточиться на понимании работы с условиями внутри цикла
Представим, что по алгоритму последовательного деления на числа до x / 2
нашлось одно, которое делит без остатка. Значит, переданный аргумент — не простое число, и дальнейшие вычисления не имеют смысла. В этом месте стоит возврат False
.
Если цикл отработал целиком, и не нашлось число, которое делит без остатка, значит, число — простое.
Задание
Реализуйте функцию is_contains_char()
, которая проверяет с учётом регистра, содержит ли переданная строка указанную букву. Функция принимает два параметра:
- Строка
- Буква для поиска
print(is_contains_char('Hexlet', 'H')) # => True
print(is_contains_char('Hexlet', 'h')) # => False
print(is_contains_char('Awesomeness', 'm')) # => True
print(is_contains_char('Awesomeness', 'd')) # => False
Полезное
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
from index import is_contains_char
def test_is_contains_char():
assert is_contains_char("Hexlet", "H") is True
assert is_contains_char("Hexlet", "h") is False
assert is_contains_char("Awesomeness", "m") is True
assert is_contains_char("Awesomeness", "d") is False
assert is_contains_char("Awesomeness", "o") is True
Решение учителя откроется через:
20:00
