我正在编写一个随机替换密码,它在用于编写常规句子时效果很好。但是,当我尝试测试“abbcccddddeeeee”时,我会得到一些回报,例如“我是谁,我是J J J K K K K K'”。如何更改我的代码,以便键入' key'或者' vari'周期中每个字母的更改是否保持不变,以便没有任何字母对应多个其他字母?
import random
intext = raw_input("Enter a message to encrypt: ")
intext = intext.upper()
key = random.randint(0,27)
vari = random.randint(0,27)
def randomsub(intext):
outtext = []
intext = intext.upper()
for c in intext:
num = ord(c)
if num >= ord('A') and num <= ord('Z'):
num = num - ord('A')
num = num + (key + vari) % 26
num += ord('A')
outtext.append(chr(num))
return ' '.join(outtext)
print randomsub(intext)
答案 0 :(得分:0)
不确定为什么你同时拥有key
和vari
,但随机性应该在你的函数中,并且至少有一个对randint
的调用应该在循环中。我建议将key
作为用户提供的输入,并使用它来播种random
。这样,使用相同的文本和相同的键,您将获得相同的输出,但文本中的重复字母将在结果中有所不同。最后,但并非最不重要的是,如果您希望输出为字母,则需要展开括号中添加key
和vari
以包含num
的括号,即num = (num + vari) % 26
if你按照我的建议切换到使用key
。