Ниже детальное решение и разбор. Задача: посчитать в введённом числе количество цифр 3 (k1) и количество всех остальных цифр (k2).
Что было не так в исходном коде
- В ветке if b == 3 нужно увеличивать k1, но тело этого условия пустое.
- В ветке else корректно увеличивается только k2, но если цифра равна 3, k2 не увеличивается.
- Также полезно учесть отрицательные числа и возможность входа числа 0.
Исправленный базовый вариант (без учета нулевого числа как особого случая, но с обработкой отрицательных чисел)
- Логика:
- Приводим число к положительному: a = abs(a).
- Пробегаем по всем цифрам числа, извлекая младшую цифру через a % 10.
- Если цифра равна 3, увеличиваем k1, иначе увеличиваем k2.
- После обработки цифры удаляем её: a //= 10.
- В конце выводим k1 и k2.
Код: k1 = 0 k2 = 0 a = int(input()) a = abs(a) # обрабатываем отрицательные числа while a != 0: b = a % 10 if b == 3: k1 += 1 else: k2 += 1 a //= 10 print(k1, k2)
Пояснение по шагам
- k1 и k2 инициализируются нулями — счетчики цифр 3 и других цифр.
- a = abs(a) позволяет считать цифры даже если введено отрицательное число.
- Цикл while выполняется для всех цифр числа: пока a не станет 0, берём последнюю цифру b = a % 10.
- Если b == 3, увеличиваем только k1 (k1 += 1). Иначе увеличиваем k2 (k2 += 1).
- Удаляем последнюю цифру: a = a // 10.
- По завершении цикла выводим два счетчика: количество цифр 3 и количество остальных цифр.
Пример теста
- Ввод: 3353
- цифры: 3, 3, 5, 3
- k1 = 3, k2 = 1
- вывод: 3 1
Дополнительные улучшения (необязательно, но полезно)
- Обработка числа 0 как особого кейса: если пользователь вводит 0, в базовой версии цикл не выполнится и будут выведены 0 0. Если нужно трактовать число 0 как одну цифру 0 (то есть k2 = 1, k1 = 0), можно добавить отдельную ветку до цикла:
- если a == 0: print(0, 1) и завершить программу.
- иначе идти по обычному циклу как выше.
Но базовая исправленная версия выше подходит для большинства школьных задач и явно исправляет логическую ошибку в исходном коде.