我一直在尝试处理我的这段代码,它接受一串单词,将每个字母转换为ASCII码,添加一定数量(rotate_number),然后打印出这些数字的翻译版本,全部转换回一串随机字母(但空格和符号保持不变)。例如,我想要一个字符串“你今天过得怎么样?”旋转多少说+4,以便最终产品说“Lsa evi csy xshec?”
这是我到目前为止的代码,但是当我运行它时,只旋转一个字母并打印出来:
def encrypt_words(words, rotate_number):
blank = ""
for i in words:
translate1 = ord(i) + rotate_number
translated = chr(translate1)
blank += translated
print translated
encrypt_words("How are you today?", 3)
另外,如果我的问题已经得到解答,我很抱歉。我一直在网上和这个特定的网站上搜索,但似乎没有什么对我有用......
答案 0 :(得分:0)
看起来您希望打印字符串“空白”,而不是在代码中翻译。请尝试以下方法:
def encrypt_words(words, rotate_number):
blank = ""
for i in words:
translate1 = ord(i) + rotate_number
translated = chr(translate1)
blank += translated
print blank
空白是每个翻译值的串联。您应该重命名'blank',因为该名称具有误导性。
答案 1 :(得分:0)
我建议先创建一个旋转方法
def rotate(alphabet,rotation):
return alphabet[rotation:]+alphabet[:rotation]
#test it
print(rotate(string.ascii_lowercase,5))
现在创建一个旋转的查找表
def create_lookup_table(rotation,*alphabets):
if not alphabets:
alphabets = [string.ascii_lowercase,string.ascii_uppercase]
alphabet = "".join(alphabets)
rotated = "".join(rotate(a,rotation) for a in alphabets)
return dict(zip(alphabet,rotated))
# test it
create_lookup_table(5)
create_lookup_table(2,"abcdef","GHIJKLM")
现在实施ceasar密码很简单,因为我们已经给自己提供了帮助我们的工具集
def ceasar(msg_plain,rotation):
lookup_table = create_lookup_table(rotation)
return ''.join(lookup_table.get(char,char) for char in msg_plain)
# test it
ceasar("Hello World!",13) # 'Uryyb Jbeyq!'