Step 4 (S-14668)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/3366/step/4

S-14668-1.png

Рассмотрим еще одну задачу на цикл for. Пользователь вводит два целых числа a и b, наша задача вывести сумму всех нечетных чисел от a до b. Например, нам ввели числа 3 и 7. Нам нужно посчитать сумму всех нечетных чисел от 3 до 7, включая границы интервалов. Нечетных чисел в этом интервале 3. Сумма этих чисел будет равна 3 + 5 + 7 = 15. Число 15 мы выводим качестве результата.

Подумаем над решением этой задачи. Первое, что мы должны сделать - это прочитать два числа.

S-14668-2.png

Два числа вводятся в одной строке, поэтому мы вначале считываем строку с помощью функции input, далее к ее результату применяем функцию split(). Она принимает на вход строку и разделяет ее на строки по пробелам или другим разделительным символам. Применительно к нашему случаю, конструкция

a, b = input().split()

разделит входную строку на две строки "3" "7", которые запишутся в переменные a и b.

Значения переменных a и b имеют строковый тип, поэтому следующим шагом будет преобразование их в целые числа.

S-14668-3.png

Для того чтобы посчитать сумму нечетных чисел на интервале, мы заводим специальную переменную s и инициализируем ее значением 0. В ней мы будем накапливать сумму чисел.

Теперь нужно определить саму последовательность нечетных чисел. Пробежимся по интервалу и проверим каждое число в нем на нечетность.

Если остаток от деления числа на 2 равен 1, мы будем добавлять это число к нашей сумме. Таким образом, наш цикл выглядит следующим образом:

S-14668-4.png

Отметим, что поскольку по условию задачи интервал включает в себя границы, вторым аргументом функции range будет b + 1. Внутри цикла мы делаем проверку на нечетность и в зависимости от результата проверки, либо увеличиваем значение переменной s на текущее значение переменной i, либо переходим в начало цикла. По завершении цикла в переменной s будет накоплена сумма всех нечетных чисел заданного интервала. В последней строке мы выводим значение s.