Python3, решаем простые задачи

avm

Опубликован:  2018-02-13T05:14:29.059779Z
300

Условия задачи: для каждого целого числа в диапазоне от единицы до ста включительно вывести на экран строку, содержащую само число, слово три, если число делится на три, слово пять, если число делится на пять.

Достаточно удобная учебная задача для демонстрации поиска возможного решения в интерактивной сессии интерпретатора Python3, в терминале, в окружении Debian stretch. Что мне понадобится... Для такой простой задачи только терминальная программа, я предпочитаю sakura, интерпретатор Питона.., всё! Приступим.

sakura and python3

Чтобы хорошо представлять, что именно требуется вывести на экран, сконструирую строки, которые нужно вывести на экран для всех четырех характерных для задачи вариантов.

Вариант первый: целое число не делится ни на три, ни на пять. Для этого варианта искомая строка будет иметь вид 4.

Вариант второй: целое число делится на три, но не делится на пять. Для этого варианта искомая строка будет иметь вид: 6 три.

Вариант третий: целое число делится на пять, но не делится на три. Для этого варианта искомая строка будет иметь вид: 10 пять.

Вариант четвёртый: целое число делится на три и делится на пять. Для этого варианта искомая строка будет иметь вид: 15 три пять.

Чтобы не печатать каждый раз одно и то же, формирую две константы:

>>> C3 = ' три'
>>> C5 = ' пять'

Далее беру самый полный вариант из четырёх возможных:

>>> x = 15

и начинаю формировать искомую строку, сначала вставляю в строку само число:

>>> print("{0}".format(x))
15

затем добавляю в строку проверку первого условия:

>>> x % 3
0
>>> print("{0}{1}".format(x, C3 if not x % 3 else ''))
15 три

и наконец добавляю в строку проверку второго условия:

>>> x % 5
0
>>> print("{0}{1}{2}".format(x, C3 if not x % 3 else '', C5 if not x % 5 else ''))
15 три пять

Формирую заданный интервал:

>>> list(range(1, 101))[0]
1
>>> list(range(1, 101))[-1]
100

Чтобы не получить слишком длинный выхлоп, слегка сокращу заданный интервал и протестирую возможное решение:

>>> for x in range(8, 17):
...     print("{0}{1}{2}".format(x, C3 if not x % 3 else '', C5 if not x % 5 else ''))
... 
8
9 три
10 пять
11
12 три
13
14
15 три пять
16

Выравняю числа с учётом того, что максимальное число в интервале двузначное:

>>> for x in range(8, 17):
...     print("{0:>2}{1}{2}".format(x, C3 if not x % 3 else '', C5 if not x % 5 else ''))
... 
 8
 9 три
10 пять
11
12 три
13
14
15 три пять
16

Вся отладка выглядит так:

result

По условию задачи максимальное число в интервале трёхзначное, соответственно двоечка в первых фигурных скобках форматируемой строки будет заменена на троечку. Таким образом, одно из возможных решение задачи имеет вид:

for x in range(1, 101):
    print("{0:>3}{1}{2}"
          .format(x,
                  ' три' if not x % 3 else '',
                  ' пять' if not x % 5 else ''))
 
Комментарии: