Не за что, всегда рада помочь :).
Эта строка:
- Создает запись для покупателя, если его нет.
- Создает запись для товара с начальным количеством 0, если его нет.
- Добавляет к текущему количеству товара новую порцию.
Если пошагово, то это выглядит так: Допустим, в начале у нас есть пустой словарь sales = {}.
1). Обработка sales.setdefault(name, {})
- Проверяем, есть ли ключ name (имя покупателя) в словаре sales.
- Если покупателя еще нет, он добавляется со значением {} (пустой словарь).
- Если покупатель уже есть, возвращается его текущий словарь покупок.
2). Обработка .setdefault(item, 0)
- После того как словарь покупок покупателя получен, проверяется наличие товара item.
- Если товара еще нет, он добавляется со значением 0.
- Если товар уже есть, возвращается текущее количество.
3). Сложение количества После установки значений по умолчанию выполняется добавление количества: sales[name][item] = sales[name][item] + int(count)
Фактически эта строка:
- Получает текущее количество товара sales[name][item].
- Преобразует введенное количество count в целое число.
- Складывает и записывает обновленное значение обратно.
можно и до одной:
print('\n'.join(['*' * 15] + ['*' + ' ' * 13 + '*'] * 3 + ['*' * 15]))
Ага, заготовка. Допилю на досуге :)
Шаблон сделан на Бутстрапе, адаптивность в нем уже предусмотрена.
requirements.txt в проекте есть и всегда был. Вы проделали массу ненужных действий, хотя ссылка на файл зависимостей указана в этой статье .


requirements.txt там всегда был, а pip freeze создает этот файл, анализируя пакеты, установленные в вирт окружении.

Решение с XOR есть в предыдущей статье. А эта статья - о конкретном способе решения, которое основано на симметрических функциях и подходит для потока данных.
пора менять репетитора =)