Python цифры с разрядами
Особый класс операций представляют поразрядные операции. Они выполняются над отдельными разрядами чисел типа int. Но чтобы понять природу поразрядных операций, надо понимать что вообще представляет число в двоичном представление.
Двоичное представление чисел
При двоичной системе каждый разряд числа может иметь только два значения — 0 и 1. Например, 0 в десятичной системе также будет равен 0 в двоичной системе, а 1 в десятичной системе будет соответствовать 1 в двоичной системе. Следующее число в десятичной системе — 2 в двоичной системе будет соответствовать 10. То есть, когда мы к 1 прибавляем 1, то результатом будет 10. И так далее.
Например, 5 в двоичном представлении 101 и имеет три разряда. Для вывода десятичного числа в двоичной системе можно применять спецификатор 0b :
number = 5 # в двоичной форме 101 print(f"number = ") # number = 101
Без указания спецификатора функция print() выводит число в десятичной системе.
При этом Python позволяет сразу определять число в двоичной форме. Для этого число в двоичной форме указывается после префикса 0b :
number = 0b101 # определяем число в двоичной форме print(f"number = ") # number = 101 print(f"number = ") # number = 5 - в десятичной системе
Еще несколько примеров сопоставления между двоичной и десятичной системами:
number1 = 1 # в двоичной системе 0b1 number2 = 2 # в двоичной системе 0b10 number3 = 3 # в двоичной системе 0b11 number4 = 4 # в двоичной системе 0b100 number5 = 5 # в двоичной системе 0b101 number6 = 6 # в двоичной системе 0b110
Логические операции
Логические операции выполняются над отдельными разрядами числа. В Python есть следующие логические операции:
- & (логическое умножение) Умножение производится поразрядно, и если у обоих операндов значения разрядов равно 1, то операция возвращает 1, иначе возвращается число 0. Например:
x1 = 2 # 010 y1 = 5 # 101 z1 = x1 & y1 print(f"z1 = ") # z1 = 0 x2 = 4 # 100 y2 = 5 # 101 z2 = x2 & y2 print(f"z2 = ") # z2 = 4 print(f"z2 = ") # z2 = 100
x1 = 2 # 010 y1 = 5 # 101 z1 = x1|y1 # 111 print(f"z1 = ") # z1 = 7 print(f"z1 = ") # z1 = 111 x2 = 4 # 100 y2 = 5 # 101 z2 = x2 | y2 # 101 print(f"z2 = ") # z2 = 5 print(f"z2 = ") # z2 = 101
x = 9 # 1001 y = 5 # 0101 z = x ^ y # 1100 print(f"z = ") # z = 12 print(f"z = ") # z = 1100
Здесь число 9 в двоичной форме равно 1001. Число 5 равно 0101. Операция XOR дает следующий результат: 1^0, 0^1, 0^0, 1^1. Здесь мы видим, что первые два разряда чисел содержат разные значения, поэтому первые два разряда получат значение 1. А последние два разряда чисел содержат одинаковые значения, поэтому последние два разряда получат значение 0. Таким образом, мы получаем число 1100 или 12 в десятичной системе. нередко данную операцию применяют для простого шифрования:
x = 45 # Значение, которое надо зашифровать - в двоичной форме 101101 key = 102 # Пусть это будет ключ - в двоичной форме 1100110 encrypt = x ^ key # Результатом будет число 1001011 или 75 print(f"Зашифрованное число: ") decrypt = encrypt ^ key # Результатом будет исходное число 45 print(f"Расшифрованное число: ")
x = 9 # 1001 y = 5 # 0101 x = x ^ y y = x ^ y x = x ^ y print(f"x = ") # x = 5 print(f"y = ") # y = 9
Операции сдвига
Операции сдвига также производятся над разрядами чисел. Сдвиг может происходить вправо и влево.
Таким образом, если исходное число, которое надо сдвинуть в ту или другую строну, делится на два, то фактически получается умножение или деление на два. Поэтому подобную операцию можно использовать вместо непосредственного умножения или деления на два. Например:
a = 16 # в двоичной форме 10000 b = 2 c = a > b #Сдвиг числа 10000 вправо на 2 разряда, равно 100 или 4 в десятичной системе print(d) #4
При этом числа, которые участвую в операциях, необязательно должны быть кратны 2::
a = 22 # в двоичной форме 10110 b = 2 c = a > b # Сдвиг числа 10110 вправо на 2 разряда, равно 101 или 5 в десятичной системе print(d) # 5
Как разбить число на разряды
Есть число 1234567 .
Как разбить пробелами число по разрядам, чтобы получилось 1 234 567 ?
Ответы (5 шт):
x = 1234567 ''.format(x).replace(',', ' ') >>> '1 234 567'
Если хочется сгруппировать тысячи в числе в соответствии с текущей локалью пользователя:
>>> import locale >>> locale.setlocale(locale.LC_ALL, '') 'ru_RU.UTF-8' >>> print(locale.format('%d', 1234567, grouping=True)) 1 234 567
В другой локали, разделитель может быть другим:
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') 'en_US.UTF-8' >>> print(locale.format('%d', 1234567, grouping=True)) 1,234,567
Имена локалей и доступная функциональность могут зависеть от системы.
так можно любую маску сделать по количеству разрядов
import re def numberjump_filter(string): string=str(string) #s = re.match("(\d)(\d)(\d)",string) s = re.match("(.*)(\d\d\d)(\d\d\d\d)",string) return s[1]+" "+s[2]+" "+s[3]
Ещё вариант для разнообразия:
n = str(1234567)[::-1] print(' '.join(n[i:i+3] for i in range(0, len(n), 3))[::-1])
- делаем из числа строку
- переворачиваем её
- отрезаем по три символа
- объединяем их через пробелы
- ещё раз переворачиваем то, что получилось
Разбиваем на разряды, при этом используем f-string:
x = 1234567890 print(f" руб.".replace("_", " "))
Разумеется, надо учитывать, будут ли в тексте ещё символы _ , которые могут быть заменены на пробелы. В этом случае лучше вынести f-string в отдельную переменную и использовать её в коде.
x = 1234567890 fstring = f" руб.".replace("_", " ") print(f"Итого: \n Напишите сумму прописью: ________________")
3 способа определить количество разрядов в числе в Python
Статьи
Введение
В ходе статьи рассмотрим три вариации кода для определения количества разрядов в ведённом пользователем числе на языке программирования Python.
Длинный способ с циклом while
Дадим пользователю возможность ввести число:
Если было введено отрицательное число, нужно его сделать положительным. Для этого добавим его в модуль методом abs():
n = int(input('Введите число: ')) n = abs(n)
Добавим переменную count равную нулю:
n = int(input('Введите число: ')) n = abs(n) count = 0
Создадим цикл while, который не закончится, пока n > 0. В цикле будем убирать последнюю цифру в переменной n, а к count прибавлять единицу:
n = int(input('Введите число: ')) n = abs(n) count = 0 while n > 0: n //= 10 count += 1
Осталось вывести результат:
n = int(input('Введите число: ')) n = abs(n) count = 0 while n > 0: n //= 10 count += 1 print(count) # Введите число: 164832 # 6
Короткий способ циклом for
Обычно подобным не занимаются при помощи цикла for, но почему бы и нет. Как и в предыдущем способе даём пользователю возможность ввода числа, и добавляем его в модуль. Также создаём переменную count равную нулю:
n = abs(int(input('Введите число: '))) count = 0
Создадим цикл for, в котором пройдёмся по количеству символов в переменной n. Внутри цикла прибавляем к count единицу:
n = abs(int(input('Введите число: '))) count = 0 for i in range(len(str(n))): count += 1
Выведем результат в консоль:
n = abs(int(input('Введите число: '))) count = 0 for i in range(len(str(n))): count += 1 print(count) # Введите число: 111 # 3
Самый быстрый способ
Как и в предыдущих способах даём пользователю возможность ввода числа, и добавляем его в модуль:
n = abs(int(input('Введите число: ')))
Теперь в переменную count сохраним длину значения преобразованного в строковый тип данных в переменной n:
n = abs(int(input('Введите число: '))) count = len(str(n))
n = abs(int(input('Введите число: '))) count = len(str(n)) print(f'В числе находится разрядов.') # Введите число: 17424312 # В числе 17424312 находится 8 разрядов.
Заключение
В ходе статьи мы с Вами разобрали целых 3 способа определить количество разрядов в числе в Python. Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂