Вывод числа состоящего только из четных цифр Python
Обучаюсь на начальном этапе Python, не знаю как подойти к решению такой задачи:
Выведите на экран все числа в интервале от 100 до 400 включительно, каждое из которых состоит только из четных цифр (например 200, 260, 282 и т.д.).
Делаю список цифр от 100 до 400, но дальше как вывести именно только значения, состоящие из четных цифр не знаю..
a = list(range(100, 400))
i = 0
while i < len(a):
b = a[i]
i += 1
print(a)
Подскажите, пожалуйста, что делать дальше, желательно максимально доступно)
Ответы (10 шт):
for i in range(100, 401):
if (i % 10) % 2 == 0 and ((i // 10) % 10) % 2 == 0 and (i // 100) % 2 == 0:
print(i)
Вывод:
200 202 204 206 208 220 222 224 226 228 240 242 244 246 248 260 262 264 266 268 280 282 284 286 288 400
Если 4 % 2 = 0 остаток от деления равен 0, число четное.
Разделить разряды числа можно следующим образом, число 123:
123 % 10 = 3 т.е. Последнее число
(123 // 10) % 10 = 2 Среднее число
123 // 100 = 1 первое число.
Каждое число проверяем на четность если все четные, записываем.
В строчке
i += 1
1 поменяй на 2, но это конкретно в этом контексте, так оно просто отобразит числа через одно, то есть 100, 102, 104, и так далее, пропуская при этом 101, 103, и т.д.
Получилось как-то так:
for i in range(100, 401):
var1, var2,var3 = str(i)[0], str(i)[1], str(i)[2]
if int(var1) % 2 == 0 and int(var2) % 2 == 0 and int(var3) % 2 == 0:
print(f'{var1 + var2 + var3}')
Решение через множества. Создаем множество четных цифр, каждое число раскладываем на цифры и проверяем, является ли множество четных цифр надмножеством для цифр этого числа.
chet = set('02468')
for num in range(100,401):
if chet.issuperset(str(num)):
print(num)
Вариант без множеств и преобразования в строку. Разбираем в цикле каждое число из диапазона, проверяя остаток от деления на 2 и на каждой итерации деля на 10, чтобы проверить следующую цифру. Если находим нечетное число, происходит досрочный выход из while и ничего не печатается. Если цикл отработал полностью (выхода по break не было), срабатывает else: и число печатается.
for num in range(100, 401):
x = num
while x > 0:
if x % 2 != 0:
break
x //= 10
else:
print(num)
200
202
204
...
286
288
400
как вариант
for num in range(100, 401):
if all(int(digit) % 2 == 0 for digit in str(num)):
print(num)
Для while вот вариант решения.
Создайте a как пустой список и в цикле while методом append заполните его:
a = []
b = 100
n = 400
i = 0
while i <= n - b:
elem = b + i
if (elem % 10) % 2 == 0 and ((elem // 10) % 10) % 2 == 0 and (elem // 100) % 2 == 0:
a.append(elem)
i += 2
print(a)
for x in range(200, 1000, 200):
for y in range(x, x+100, 20):
for z in range(y, y+10, 2):
print(z)
Тьфу, до 400, а не до 1000. Тогда так: tio.run
lim = 401
for x in range(200, min(lim, 1000), 200):
for y in range(x, min(lim, x+100), 20):
for z in range(y, min(lim, y+10), 2):
print(z)
Зачем вообще проходить, проверять и отсеивать неподходящие числа? Просто работаем в пятеричной системе.
for i in range(25,51):
print(i//25*2,i//5%5*2,i%5*2,sep='')
Допустимые цифры 0,2,4,6,8 можно рассматривать как удвоенные 0,1,2,3,4. А такой (и не более!) набор цифр соответствует пятеричной системе счисления. В этой системе диапазон пятеричных чисел будет непрерывным 100,101,102,103,104,110,111...144,200 (а в десятичном виде это 25..50). Просто перебираем их подряд, и каждую цифру (выделяемую с помощью целочисленного деления и взятия остатка) этих пятеричных чисел при выводе умножаем на 2.
А такого ещё никто не предлагал: tio.run
def go(l, r):
x,ds = 0,[[2,4]]
while x < r:
if x >= l:
yield x
for d in ds:
if d[1]:
x += d[0]
d[1] -= 1
break
d[1] = 4
x -= 4 * d[0]
else:
dnext = ds[-1][0] * 10
x += dnext
ds.append([dnext, 3])
for x in go(200, 401):
print(x)
evens = "0 2 4 6 8".split()
for i in range(200, 401, 2):
hundreds, tens, ones = str(i)
if (hundreds in evens and
tens in evens and ones in evens):
print(i)
Обяснение:
evens, hudreds, tens, ones по-русски четные, сотни, десятки, единицы.
"0 2 4 6 8".split()— то же самое как['0', '2', '4', '6', '8'], но короче.range(200, 401, 2)- достаточно начинать с200, потому первая цифра не может быть1, и тестировать только каждое второе, т. е. четное число.str(i)- это итеровательный объект (строка из трея букв), значит, мы можем из него получить отдельные буквы распаковкойhundreds, tens, ones = str(i).