假设我输入以下内容:
1234
如何获得以下输出?
3412
这是通过将输入的数字循环移位(或旋转)两次而获得的。
我尝试了以下代码:
number = 1234
bin(number >> 1)
但是它没有产生我期望的结果。
答案 0 :(得分:6)
>>
运算符执行binary bitshift。
它将1234
的二进制表示形式向右移动,丢弃最右边(最低有效)位。
因此,您的代码不会产生3412
。
您可能希望改为旋转字符串:
>>> def rotr(string, n):
... return string[n:] + string[:n]
...
>>> rotr("1234", 2)
'3412'
您还可以随后将其转换回整数
>>> int('3412')
3412
答案 1 :(得分:3)
我将转换为字符串以对其进行切片。
number=1234
right_shift_no = 2
new_number = int(str(number)[right_shift_no:]+str(number)[:right_shift_no])
答案 2 :(得分:3)
这是懒人的版本:
>>> from collections import deque
>>> number = 1234
>>> d = deque(str(number))
>>> d.rotate(2)
>>> result = int(''.join(d))
>>> result
3412
答案 3 :(得分:2)
如果您必须坚持使用数字(尽管我会先使用字符串选项)
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)