Как исправить ошибку "TypeError: not all arguments converted during string formatting" в 21 строке?

import time

max_buffer_len = 100                        # максимальный размер рабочего буфера
buffer_len = 1                              # размер буфера чтения
work_buffer = ""                            # рабочий буфер


try:
    start = time.time()                     # запускаем таймер
    with open('text.txt', 'r') as file:     # открываем файл
        print("\n-----Результат работы программы-----\n -----Локальное время", time.ctime(), "-----")
        buffer = file.read(buffer_len)      # читаем первый блок
        if not buffer:                      # если файл пустой
            print("\nФайл text.txt в директории проекта пустой.\nДобавьте не пустой файл в директорию или переименуйте существующий *.txt файл.")

        while buffer:                                             # пока файл не пустой
            while (buffer < '0' or buffer > '9') and buffer:      # ищем цифры
                buffer = file.read(buffer_len)                    # читаем очередной блок

            while (buffer >= '0' and buffer <= '9') and buffer:   # обрабатываем цифры
                if buffer % 2 == 0:                               # находим четное число
                    if len(set(list(buffer))) == len(buffer):           # проверяем нет ли в буфере повторяющихся цифр
                        work_buffer += buffer
                    else:
                        work_buffer += ''.join(sorted(set(list(buffer)), key=buffer.index))  #  убираем повторяющиеся цифры из числа
                        work_buffer += ' '

            finish = time.time()
            result = finish - start  # отключаем таймер
    print(work_buffer, "Program time: " + str(result) + " seconds.")

except FileNotFoundError:
    print("\nФайл text.txt в директории проекта не обнаружен.\nДобавьте файл в директорию или переименуйте существующий *.txt файл.")

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

Автор решения: CrazyElf
while (buffer >= '0' and buffer <= '9') and buffer:
    if buffer % 2 == 0: 

В buffer у вас строка, её нужно сначала преобразовать в число, прежде чем проверять на чётность. Сейчас % питоном воспринимается как старый способ форматирования строки и он не срабатывает, потому что строка и аргументы форматирования не подходят друг другу. Можете в число прямо в условии преобразовать:

    if int(buffer) % 2 == 0: 
→ Ссылка