Python 函数,简单加密初学者级

Python 函数,简单加密初学者级,python,Python,我的任务是制作一个有两个功能的程序。第一个功能是,用户插入一个单词,程序打印出相同的单词,但每个字母之间都有“*”,例如“*t*a*b*l*e*”,这工作正常 我需要第二个函数的帮助,程序将打印出相同的单词,但字母已移动一个位置,例如“ABCD”将是“BCDE”。我已经开始用字母表做一个数组,但我不知道如何继续 这是我的密码: for i in range(len(s)): print("*",s[i],sep='',end='') print("*") def krypt()

我的任务是制作一个有两个功能的程序。第一个功能是,用户插入一个单词,程序打印出相同的单词,但每个字母之间都有
“*”
,例如
“*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()

如果您有一个字符列表,您可以这样做:

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

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'}

  • 案例保留
  • 处理非字母字符(使其保持不变)

基本上,您尝试的加密被称为凯撒密码

您可以尝试:

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或减少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)

让我们了解你的思维过程。为什么选择数组?您希望数组为每个索引返回什么?函数
ord
chr
可能很方便,也可能是模运算符
%
和一个
字节数组。或者,您使用字典映射硬编码所有内容,并使用
str.translate
。如果您对第一个函数没有疑问,为什么要提及它?此外,当您移动Z时,应该是什么行为?是否同时支持小写和大写字母?如果字典同时包含小写和大写字母,则只需对字符串进行一次遍历。通过用一个参数泛化移位,就得到了一个Caesar密码。别忘了某种模运算,因为一个字母移过Z会得到意想不到的结果。是的,在Z或Z之后,我们可以通过应用模运算再次遍历到a/a。谢谢,我得到了第8行(打印)的无效语法错误,数据是用户输入的单词吗?@djprofiler请在print语句中添加(),因为您正在使用python 3谢谢,我希望字母增加1。如果您有26个字母,+1和-25是同一字母的索引。string.ascii_小写[x+1]==string.ascii_小写[x-25]为真