Круговое смещение (или вращение) цифр цифр числа в Python

Предположим, у меня есть следующие данные:

1234

Как я могу получить следующий результат?

3412

Это достигается двойным циклическим сдвигом (или поворотом) цифр ввода.

Я пробовал следующий код:

number = 1234
bin(number >> 1)

но это не дает тех результатов, которых я ожидал.

Прежде всего, вам, вероятно, следует сохранить его как строку, а не целое число

RnRoger 28.09.2018 14:31

Кстати, это называется правильным вращением.

blhsing 28.09.2018 14:33

"но на выходе я получаю 3412". Это странно, на моей машине этот код печатает 0b1001101001. Я думаю, что первое, что вам следует сделать, это поискать в документации по ">>", чтобы убедиться, что "правое переключение" делает то, что вы думаете.

Kevin 28.09.2018 14:37

@Kevin, я пытаюсь преобразовать число в двоичное, затем сдвиг вправо, затем двоичное в число

Tanya Chaudhary 28.09.2018 14:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
4
4 144
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я бы преобразовал в строку, чтобы иметь возможность разрезать ее.

number=1234
right_shift_no = 2
new_number = int(str(number)[right_shift_no:]+str(number)[:right_shift_no])

Спасибо!! Логика решения этой моей проблемы сложна. спасибо за то, что поделились простой логикой

Tanya Chaudhary 28.09.2018 14:44

Вот версия для ленивца:

>>> from collections import deque
>>> number = 1234
>>> d = deque(str(number))
>>> d.rotate(2)
>>> result = int(''.join(d))
>>> result
3412
Ответ принят как подходящий

Оператор >> выполняет двоичный сдвиг.

Он перемещает двоичное представление 1234 на место вправо, отбрасывая самый правый (наименее значимый) бит.

Поэтому ваш код не приводит к 3412.

Вместо этого вы, вероятно, захотите вращать строку:

>>> def rotr(string, n):
...     return string[n:] + string[:n]
... 
>>> rotr("1234", 2)
'3412'

Вы также можете впоследствии преобразовать его обратно в целое число.

>>> int('3412')
3412

Благодарность!! опять же, как @onno, логика проще, чем я думал, чтобы решить проблему

Tanya Chaudhary 28.09.2018 14:47

Если вы должны придерживаться чисел (хотя я бы сначала выбрал строковый вариант)

from math import log10, floor
s = 2  # digits to shift by
p = 10 ** s  # that as a power of 10
n = 1234
rhs = n // p  # right hand side of result (here 12)
rhs_n = floor(log10(rhs)) + 1  # number of digits in rhs
rhs + (n % p) * 10 ** rhs_n  # add other digits, n % p, shifted by size of rhs

и все вместе в функции

from math import log10, floor

def rotate(n, s):
    p = 10 ** s
    rhs = n // p
    return rhs + (n % p) * 10 ** (floor(log10(rhs)) + 1)

эй, спасибо !! Вы должны объяснить мне, что это немного отличается от того, что я думал

Tanya Chaudhary 28.09.2018 14:46

@TanyaChaudhary объяснила

joel 28.09.2018 15:15

Другие вопросы по теме