如何以循环方式遍历循环?

时间:2019-10-20 08:33:05

标签: python python-3.x

我正在尝试通过将给定数字的每个数字与密钥数字相加来对其进行加密。例如:假设数字为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

4 个答案:

答案 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.cycleitertools.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)]))
相关问题