Top.Mail.Ru
Ответы

Объясните работу строчки на языке Python пожалуйста...

Моя задача: вывести из определенного диапазона чисел такие числа, цифры которых не делятся на два. Для решения задачи был составлен такой код:

for N in range(1000, 10000):
if all(int(n) % 2 == 1 for n in str(N)):
print(N)

Мне не понятна работа второй строки, а именно того, что происходит в скобках. При её чтении всё, что мне понятно, так это если все переменные в скобках равны True, вывести N (изначальное число). Но что именно происходит в скобках, я не понимаю. Если читать запись последовательно, у меня получается такая схема:

  1. Остаток деления числа n на два равен единице;

  2. Перебор цифр в строке, во время которого переменная n равняется текущей цифре.

Причем два этих пункта записаны без каких-то разделительных знаков, и в непонятном для меня порядке. Разве мы не должны сначала перебирать каждую цифру, присваивать её значение переменной n, и уже потом производить над этой переменной необходимую проверку? Как мы проводим проверку переменной n, если цикл for по идее её еще не перебрал (тк он стоит после проверки цифры n на нечётность)?

Надеюсь, мой вопрос более или менее понятен... Короче говоря, объясните работу второй строки, плиз...

По дате
По Рейтингу
Аватар пользователя
Ученик

Во второй строке происходит использование генератора списка (list comprehension) и функции all().

Генератор списка состоит из выражения "int(n) % 2 == 1", которое проверяет, является ли цифра числа N нечётной, для каждой цифры n в строковом представлении числа N. Если для всех цифр числа N это выражение истинно (т.е. все цифры нечётные), то генератор вернет список из True значений. В противном случае, если хотя бы одна цифра чётная, генератор вернет список из False и True значений.

Затем функция all() принимает этот список и возвращает True, если все элементы списка равны True, и False в противном случае. Таким образом, условие "all(int(n) % 2 == 1 for n in str(N))" проверяет, что все цифры числа N нечётные.

Если условие истинно, то выполняется команда "print(N)", которая выводит число N на экран. В результате работы этого кода будут выведены все четырехзначные числа, у которых все цифры нечётные.