((字母的索引+ 13)超出范围时,我不知道如何有效地返回字母的开头
我编写了一个仅在(字母的索引+ 13)在范围内时起作用的函数。
def rot13(message):
letters = [i for i in message]
for i in letters:
if i.isupper():
letters[letters.index(i)] =
string.ascii_uppercase[string.ascii_uppercase.index(i) + 13]
elif i.islower():
letters[letters.index(i)] =
string.ascii_lowercase[string.ascii_lowercase.index(i) + 13]
else:
continue
return ''.join(letters)
例如,当我打电话时rot13('Test'),我当然会收到“字符串索引超出范围”错误,该怎么解决?
答案 0 :(得分:0)
使用模运算符%
:
Modulo将数字除以给定因子,其余部分保留下来,例如:
27 % 26 = 1
在您的情况下,将是以下两行:
string.ascii_uppercase[(string.ascii_uppercase.index(i) + 13) % 26]
string.ascii_lowercase[(string.ascii_uppercase.index(i) + 13) % 26]