Коротко о задаче
- Нужно подсчитать, сколько цифр числа равны 3 (k1), и сколько цифр не равны 3 (k2).
- Пройдёмся по цифрам числа слева направо через деление на 10 в цикле.
Что исправлено и почему
- В исходном коде внутри if b == 3 не было увеличения k1 (нет k1 = k1 + 1). Нужно увеличивать k1, если цифра равна 3.
- Хорошо бы работать с отрицательными числами и корректно считать для числа 0.
- Чтобы корректно обрабатывать отрицательные числа, берём abs(a).
- Чтобы корректно учитывать число 0 (в записи одной цифрой '0'), можно специально обработать этот случай.
Ниже приводится устойчивый вариант решения.
Код (устойчивый к отрицательным числам и к числу 0) a = int(input()) k1 = 0 # количество цифр 3 k2 = 0 # количество других цифр a = abs(a)
if a == 0: # число 0 имеет одну цифру '0', которая не равна 3 k2 = 1 else: while a != 0: b = a % 10 # последняя цифра if b == 3: k1 += 1 else: k2 += 1 a //= 10
print(k1, k2)
Пояснение по шагам
- Считываем число a.
- Инициализируем счётчики k1 и k2.
- Берём абсолютное значение a, чтобы правильно работать с отрицательными числами.
- Если исходное число было 0, мы устанавливаем k2 = 1 (одна цифра, равная 0).
- Иначе, пока остаются цифры (a != 0):
- извлекаем последнюю цифру b = a % 10;
- если b равна 3, увеличиваем k1;
- иначе увеличиваем k2;
- удаляем последнюю цифру a за счёт a //= 10.
- В конце выводим k1 и k2.
Пример
- Ввод: 30345
- цифры: 3, 0, 3, 4, 5 → k1 = 2, k2 = 3
- вывод: 2 3
Дополнение (пояснение альтернативы)
- Можно реализовать аналогичную задачу через строковую обработку: считать количество символов '3' в строке и вычесть из общего количества цифр, но при этом потребуются дополнительные проверки на знак и нулевой ввод. В числовом варианте этот цикл по разрядам более наглядный для школьной практики.