5

101 игра нa python. Информатика. Системы счисления

Серия Информатика

Статья из серии 101 игра на python, где я публикую разбор кода учебного репозитория для делающих первые шаги в разработке на python и просто любителей хорошего кода. В репозитории находится сборник программ и игр, написанных лёгким языком, по которым ты можешь изучать код.

Системы Счисления


1. Абстрактная система счисления

На важно, как обoзначать числа, можно использовать любой набор символов, главное, чтобы они соответствовали прaвилам:

  • Основание (базис): Это количество уникальных символов (цифр), которые мы используем. Обозначим основание как b.

  • Цифры: Это символы, которые мы используем для представления чисел. Обычно это арабские цифры (0, 1, 2, 3, ...), латинские(I,II,II,..), но могут быть и другие символы. Например:

  • Позиция: Каждая цифра в записи числа имеет свою позицию, которая влияет на её значение.

  • Разряды: Каждая позиция называется разрядом (например, единицы, десятки, сотни и т.д.)

Как строится система счисления?

  1. Выбор основания: Выбираем целое число b, которое будет основанием нашей системы.

  2. Выбор цифр: Нам нужно b уникальных цифр. Обычно это 0, 1, 2, ..., b-1.

  3. Запись числа: Число записывается как последовательность цифр. Значение каждой цифры умножается на основание, возведенное в степень, равную ее позиции (начиная с 0 справа).

Формула для расчета значения числа:

Если у нас есть число, записанное в виде последовательности цифр dₙ dₙ₋₁ ... d₁ d₀, то его значение в десятичной системе можно вычислить по формуле:

значение = dₙ * bⁿ + dₙ₋₁ * bⁿ⁻¹ + ... + d₁ * b¹ + d₀ * b⁰

Где:

  • dᵢ - цифра в i-ом разряде

  • b - основание системы счисления

  • i - номер разряда (справа налево, начиная с 0)

Пример:

Предположим, у нас есть число 123 в десятичной системе (основание 10). По формуле:

1 * 10² + 2 * 10¹ + 3 * 10⁰ = 100 + 20 + 3 = 123

Порядки счисления (разряды):

Порядки, как мы уже говорили, это позиции цифр в числе, каждая позиция имеет свой вес, который определяется основанием в степени ее порядкового номера.

  • d₀: единицы (b⁰)

  • d₁: b (b¹)

  • d₂: b²

  • d₃: b³

  • и так далее

Правила:

  1. Диапазон цифр: Используются цифры от 0 до b-1.

  2. Позиционный принцип: Значение цифры зависит от её позиции.

  3. Переход к следующему разряду: Когда в разряде достигается значение b, происходит перенос в следующий разряд (аналог того как после 9 в десятичной системе прибавляется 1 к следующему разряду и получается 10)

Груши - яблоки:

  • 🍎 (яблоко)

  • 🍐 (груша)

  • 🍉 (дыня)

  • 🧺 (корзинка)

Правила:

  1. 3 🍎 = 1 🍐

  2. 5 🍐 = 3 🍉

  3. 2 🍉 = 1 🧺

Представление чисел:

Мы будем представлять количество фруктов в виде строки, где каждый символ юникода соответствует одному фрукту. Например, "🍎🍎🍎" - это 3 яблока, а "🍉🍉" - это 2 дыни.

Арифметические операции:

Примеры:

Разъяснение кода:

  1. normalize_fruits(fruits): Эта функция преобразует строку с фруктами к минимальному виду. Она сначала считает количество каждого фрукта, а затем, используя правила обмена, преобразует их к более крупным единицам (яблоки в груши, груши в дыни, дыни в корзины), после преобразования склеивает обратно в строку с минимальным набором фруктов.

  2. add_fruits(fruits1, fruits2): Эта функция выполняет сложение двух строк с фруктами. Она просто конкатенирует две строки и затем нормализует результат.

  3. sub_fruits(fruits1, fruits2): Это функция для вычитания одной строки фруктов из другой. Она преобразует всё в "количество яблок" и затем выполняет вычитание, а потом обратно переводит яблоки в нормализованный вид, при этом проверяет возможность вычитания.

  4. Примеры: В конце кода приведены примеры сложения и вычитания с различными комбинациями фруктов и выводом результатов.

Задания:

  1. Попробуй добавить в код функцию для умножения фруктов на целое число (например, multiply_fruits(fruits, n)).

  2. Реализуй функцию compare_fruits(fruits1, fruits2), которая сравнивает две строки с фруктами и возвращает "больше", "меньше" или "равно".

  3. Придумай свои собственные правила обмена фруктов и модифицируй код под них.

  4. Добавь проверку на корректность входных данных (чтобы строка состояла только из разрешенных символов юникода)

  5. Реализуй более продвинутое вычитание, например, не выдавать ошибку "Невозможно вычесть", а выводить результат со знаком минус (усложненное задание).


2. Конкретные системы счисления

Теперь давай рассмотрим конкретные примеры систем счисления и поработаем с ними.

2.1. Двоичная (бинарная) система (основание 2)

  • Цифры: 0, 1

  • Используется в компьютерах: Все данные в компьютерах представлены в двоичном коде (битах).

Пример:

  • Число 1011₂ (читается как "один ноль один один по основанию 2"). Перевод в десятичную систему:
    1 * 2³ + 0 * 2² + 1 * 2¹ + 1 * 2⁰ = 8 + 0 + 2 + 1 = 11₁₀

2.2. Троичная система (основание 3)

  • Цифры: 0, 1, 2

  • Интересна в теории: Применяется в некоторых областях математики и информатики.

Пример:

  • Число 210₂ (читается как "два один ноль по основанию 3"). Перевод в десятичную систему:
    2 * 3² + 1 * 3¹ + 0 * 3⁰ = 18 + 3 + 0 = 21₁₀

2.3. Семеричная система (основание 7)

  • Цифры: 0, 1, 2, 3, 4, 5, 6

  • Менее распространена: Используется в некоторых узких областях, например, в некоторых системах кодирования.

Пример:

  • Число 345₇ (читается как "три четыре пять по основанию 7"). Перевод в десятичную систему:
    3 * 7² + 4 * 7¹ + 5 * 7⁰ = 147 + 28 + 5 = 180₁₀

2.4. Десятичная система (основание 10)

  • Цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

  • Повседневная: Самая распространенная система, которую мы используем каждый день.

Пример:

  • Число 789₁₀. Перевод в десятичную систему: (смысла нет, это и есть десятичное)
    7 * 10² + 8 * 10¹ + 9 * 10⁰ = 700 + 80 + 9 = 789₁₀

2.5. Шестидесятиричная система (основание 60)

  • Цифры: 0-59 (в практическом применении используются комбинации символов)

  • Историческая: Использовалась в Древнем Вавилоне, а сейчас для измерения времени (часы, минуты, секунды) и углов.

Пример:

  • Представим число 25:30:15₆₀ (25 градусов, 30 минут, 15 секунд) или
    25 * 60² + 30 * 60¹ + 15 * 60⁰ = 25 * 3600 + 30 * 60 + 15 * 1 = 90000 + 1800 + 15 = 91815₁₀ (общее число секунд)

3. Задания

Задание 1:

Переведи следующие числа из одной системы в другую:

  • 11011₂ в десятичную

  • 201₃ в десятичную

  • 563₇ в десятичную

  • 45₁₀ в двоичную

  • 34₁₀ в троичную

  • 150₁₀ в семеричную

Задание 2:

Придумай свою собственную систему счисления с основанием, например, 5 (пятеричная). Запиши несколько чисел в этой системе и переведи их в десятичную.

Задание 3:

Реализуй функции для перевода из десятичной системы в двоичную, троичную, семеричную и обратно (как в примерах выше)

Задание 4:

Напиши функцию для сложения двух двоичных чисел, представленных в виде строк. (Усложненное)

Задание 5:

Попробуй перевести какое-то время в секунды, представленное в виде "ч:м:с" в десятичную систему и обратно.

Советы:

  • Практикуйся в переводах. Чем больше ты тренируешься, тем лучше будешь понимать принципы систем счисления.

  • Не бойся экспериментировать. Попробуй создавать свои собственные системы счисления.

  • Используй Python для проверки своих решений и автоматизации перевода.

Запустить код в google colab

Посмотреть на github

Другие шпаргалки

Серия «101 игра на python»

Удачи!

UPD:

КОД ПЕРЕЕХАЛ ПО НОВОМУ АДРЕСУ

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества