如何在python中循环使用字母表索引?

2024-05-16 00:40:09 发布

您现在位置:Python中文网/ 问答频道 /正文

问题: 在国家安全局,你如何区分外向者和内向者?如果你是瑞林贝夫,那么你就可以继续下去了

我在USENET上发现了这个笑话,但是笑话被打乱了。也许你能破译它?根据维基百科,ROT13(http://en.wikipedia.org/wiki/ROT13)经常被用来混淆USENET上的笑话

提示:对于此任务,您只能替换字符。不是空格、标点符号、数字等。测试示例:

我的代码:

def rot13(message):
    solved = ""
    for i in message:
        if i == "," or "-" or "/" or "." or "1" or "2" or "3" or "4" or "5" or "6" or "7" or "8" or "9":
            solved += i
        else:
            decipher = chr(ord(i)+13)
            solved += decipher
    return solved.upper()

我需要解决的问题 每次我试图更改超过第13个索引的字母时,它都会给我一个空格,而不是一个字母。 例如,当我把字母“u”放在函数中时,它会给我一个“u”,但我想要“h”。如何在Python中循环使用字母表,而不只是在第26个索引上结束


Tags: orhttpmessage字母国家笑话区分en
2条回答

您需要使用modulo运算符:%来“环绕”字母表

(ord(i) + 13) % 26 = # value between 0 and 25, the substituted letter index

模运算是密码学中非常重要的一种算法,应用非常广泛

试试这个:

import string

letters = string.ascii_letters
letters += letters  # now you can easily go for 'z' + 26, etc.

print ''.join( [letters[letters.find(k) + 13] if k in letters else k for k in msg] )

输出:

in tHE ELEvAtors, tHE ExtrovErt LooKs At tHE OTheR Guy's sHoEs

相关问题 更多 >