我的目的是制作一个包含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()
答案 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)