Нужна помощь с .join

Возникает ошибка в коде, помогите понять в чем дело.

Traceback (most recent call last):
  File "/home/kali/Рабочий стол/main.py", line 40, in <module>
    s = ' '.join(collisions[i])
KeyError: 0

Код:

from bitarray import bitarray
from bitarray.util import ba2int    # pip install bitarray


def CRC(arg):
    arg = format(arg, 'b') # Представляем входное сообщение битовой строкой
    arg+= "00000" # Добавляем входному сообщению пять нулей, что соотв, домножению на x*5
    bits = bitarray(arg) # Представляем как массив бит

    for i in range(len(bits) - 5):
        if bits[i] == 1:
            bits[i] ^= 1 # Когда встречаем единицу в старшем разряде -
            bits[i+3] ^= 1 # выполняем побитовый XOR в соответствии с G(x) = x°5 + x°2 + 1
            bits[i+5] ^= 1

    return ba2int(bits) # Возвращаем полученное значение функции целым числом

while True:
    opt = int(input('''\n1) Получение значения хеш-фушкции CRC для входного сообщения (1 байт)
                       \n2) Поиск всех коллизий хеш-функции для всех аргументов (1 байт)
                       \n0) Выход
                       \nВыберите одну из предложенных опций: '''))
    if opt == 0:
        break
    elif opt == 1:
        arg = int(input("\nВведите целое число от 0 до 255: "))
        f = CRC(arg)
        print(f"\nВычисленное значение: {format(f, 'b')}")
    elif opt == 2:
        collisions = {} # Создаем словарь ключ - значение CRC функции, значение словаря - список аргументов
# при которых CRC функция принимает данное значение CRC

        for i in range(256):
            f = CRC(1)
            if f in collisions:
                collisions[f].append(str(i)) # Если такой ключ уже есть - добавляем в список аргумент
            else:
                collisions[f] = [str(i)] # Если нет - создаем список с аргументом
        print("Значение хеш-функции\tАргументы при которых получается данное значение")
        for i in range(32): # Т.к. x*5 - перебираем уже вычисленные значения функции от до 31
            s = ' '.join(collisions[i])
            print(f"\t{format(i, 'b')}\t\t{s}") # формируем строки и выводим
        else:
            print("\nОшибка ввода попробуйте еще раз: ")

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

Автор решения: CrazyElf
        for i in range(256):
            f = CRC(1) # ОШИБКА! Аргумент функции - константа

Так вы не используете переменную цикла i и вычисляете CRC всегда от аргумента 1. Исправьте это и всё заработает как нужно:

        for i in range(256):
            f = CRC(i) # теперь правильно
→ Ссылка