поиск минимального и максимального по критерию длины числа python

Дана последовательность чисел, завершающаяся числом 0. Найдите самое короткое и длинное число из введенных. Для вычисления длины числа, нахождения минимума и максимума используйте отдельные функции.

Формат входных данных:

Вводится последовательность целых чисел, оканчивающаяся числом 0 (само число 0 в последовательность не входит, а служит как признак ее окончания).

def count_digits(num):
    count = 0
    while num:
        num //= 10
        count += 1
    return count
 
def min_max(num, count):
    num_len = count
    max_len, min_len = -1, 99999999
    min_num, max_num = None, None
    if num_len > max_len:
        max_len = num_len
        max_num = num
    if num_len < min_len:
        min_len = num_len
        min_num = num
    print(min_num, max_num)

while True:
    num = int(input())
    if num == 0:
        break
    count = count_digits(num)
    min_max(num, count)

Не могу понять, в чем проблема, если например просто использовать поиск максимума, т.е убирать в функции часть с посиком минимума, все хорошо.. Не могу понять, где спотыкаюсь...


Ответы (1 шт):

Автор решения: MBo

Не хватает отступов в двух последних строках, чтобы они входили в тело цикла

Здесь

if num_len < max_len:

должно быть

if num_len < min_len:

и min_len инициализируйте большим числом, например, 999999,а не -1

def min_max(lst):
    max_len, min_len = -1, 100000
    min_num, max_num = None, None
    for num in lst:
        num_len = count_digits(num)
        if num_len > max_len:
            max_len = num_len
            max_num = num
        if num_len < max_len:
            min_len = max_len
            min_num = num
    return min_num, max_num

lst = []
while True:
    num = int(input())
    if num == 0:
        break
    else:
        lst.append(num)
print(min_max(lst))
→ Ссылка