功能,简单加密初学者级别

时间:2017-12-14 10:14:38

标签: python

我的目的是制作一个包含2个功能的程序。第一个功能是用户插入一个单词,程序打印出相同的单词,但每个字母之间都有"*",例如"*t*a*b*l*e*",这工作正常。

我需要第二个功能的帮助,程序会打印出相同的单词,但字母移动了一个位置,例如"ABCD"将是“BCDE"。我已经开始制作一个数组了字母表,但我不知道如何继续。

这是我的代码:

for i in range(len(s)):
    print("*",s[i],sep='',end='')
    print("*")

def krypt():
    for i in(alfabet):
        print()

text = input("write a word ")
stars(text)
krypt()
print()

4 个答案:

答案 0 :(得分:1)

基本上,您尝试的加密称为 Caesar Cipher

您可以尝试:

data = "ABCD"
shift = 1  
encypted_data_array = []
def krypt():
    for i in data:
        new = chr(ord(i) + shift)
        encypted_data_array.append(new)
print "".join(encypted_data_array)

答案 1 :(得分:0)

如果你有一个char alphabet列表,你可以这样做:

def krypt():
    print ([alfabet[-1]] + alfabet[:-1])

答案 2 :(得分:0)

看看这个:

import string


def krypt(str_to_encrypt, n=1):
    alpha = string.ascii_lowercase
    d = {k: v for k, v in zip(alpha, alpha[n:] + alpha[:n])}
    out_s = ''.join(d.get(x.lower(), x) for x in str_to_encrypt)
    encrypted_str = ''.join(s.upper() if str.istitle(str_to_encrypt[i]) else s for i, s in enumerate(out_s))
    return encrypted_str


text = 'BCeD'
print(krypt(text))     # -> 'CDfE', default step is 1
print(krypt(text, 7))  # -> 'IJlK'

打印出字典d可以让您了解其背后的机制:

>> d
{'a': 'b', 'b': 'c', 'c': 'd', ... 'y': 'z', 'z': 'a'}
  • 案例保留
  • 处理非字母字符(保持原样不变)。

答案 3 :(得分:0)

你希望每个字母的索引字母数增加1或减少25,所以如果'a'是索引0'b'将是索引1或索引-25(英文字母)。 从列表的尾部开始不会生成超出范围的索引。

用这个理论,你可以写:

import string

alphabet = string.ascii_lowercase
def kcrypt(word):
    return ''.join(alphabet[alphabet.index(l)-len(alphabet)+1] for l in word)

print kcrypt(word)