循环移动(或旋转)Python 中数字的数字

Circularly shifting (or rotating) the digits the digits of a number in Python

假设我有以下输入:

1234

如何获得以下输出?

3412

这是通过循环移动(或旋转)输入的数字两次获得的。

我试过以下代码:

number = 1234
bin(number >> 1)

但它没有产生我期望的结果。

我会转换为字符串以便能够对其进行切片。

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

这是懒人的版本:

>>> from collections import deque
>>> number = 1234
>>> d = deque(str(number))
>>> d.rotate(2)
>>> result = int(''.join(d))
>>> result
3412

>> 运算符执行 binary bitshift.

它将 1234 的二进制表示向右移动,丢弃最右边(最低有效位)的位。

因此您的代码不会导致 3412

您可能需要字符串旋转:

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

之后你也可以将它转换回整数

>>> int('3412')
3412

如果你必须坚持使用数字(尽管我会先使用字符串选项)

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)