我正在尝试通过将给定数字的每个数字与密钥数字相加来对其进行加密。例如:假设数字为34621,密钥为9,则加密数字将为13462(即,对于第一个数字3,将其索引与密钥数字加为9,从而对所有数字进行0 + 9迭代并用第[0 + 9]个索引中的数字替换该数字,依此类推。
但是,为此,我必须多次迭代该数字,而我不知道该怎么做。有人可以帮我吗?
我的代码:
n=input()
k=input()
for i in range(len(n)):
if(n[i]+int(k)<n[len(n)-1]):
#don't know how to proceed
答案 0 :(得分:1)
这种在代码中不使用循环的方式。只有通过字符串串联才能得到答案。
n = input()
k = int(input())
number_length = len(n)
real_move = k % number_length
res = int(n[real_move:] + n[:real_move])
print(res)
答案 1 :(得分:1)
具有itertools.cycle
和itertools.islice
魔法:
from itertools import cycle, islice
def enc_shuffle(num, rotate_step=9):
"""Encrypt number (given as string) by rotating step"""
res = ''
for i, _ in enumerate(num):
gen = cycle(num) # iterator that repeats infinitely
step = i + rotate_step # slicing offset
_, val = islice(gen, 0, step + 1, step)
res += val
return res
print(enc_shuffle('34621')) # 13462
答案 2 :(得分:0)
为此%
运算符将为您提供帮助。
当您添加具有键值的列表索引,然后从列表中获取新索引的值时,您所需要的只是列表中的索引。
请参见示例0 + 9->新索引9,对其进行迭代,您将获得与之关联的值在原始列表的索引4上,该索引为(0 + 9)%le(列表长度) )
n = int(input()) # 34621
k = int(input()) # 9
l = [int(i) for i in str(n)]
l2=[0 for i in range(len(l))]
for i in range(len(l)):
l2[i] = l[(i+k)%len(l)]
new_num =int(''.join([str(i) for i in l2]))
print(new_num)
输出
13462
答案 3 :(得分:0)
您所描述的算法基本上是将字符串向右移动k%len(n)
。
您可以用一行代码来实现:
n = input()
k = int(input())
print(int(n[k % len(n):] + n[:k % len(n)]))