<p>任何大于15的字母索引将生成大于或等于26的相应索引(+10)。模运算符(<code>%</code>)将使索引返回到26以下(基本上在26个字母内环绕)</p>
<p>模是整数除法的余数。例如,如果原始字母在索引19处,那么你将用29除以26,得到1的商和3的余数。这将为您提供字母[3]作为相应的字母值<;而不是0</p>
<p>简言之,模26的任何数字将产生小于26且大于零的值(在字母表的指数化范围内)</p>
<p>请注意,程序不需要检查标点符号,.find()函数将返回-1,如果它在字母表中找不到字母,那么您可以检查字母_值>;=0来执行转换</p>
<p>此外,考虑到偏移量小于26,您可以简单地将字母字符串加倍,并避免完全使用模:</p>
<pre><code>alphabet = "abcdefghijklmnopqrstuvwxyz" * 2 # allow indexes > 26
for letter in message:
letter_value = alphabet.find(letter) # will find 1st occurrence
if letter_value >= 0: # if it is in alphabet
letter = alphabet[letter_value + 10] # then translate it
translated_message += letter # assemble result
</code></pre>
<p>如果以后您想反转翻译,可以反转字母表并按原样使用其余代码</p>
<pre><code>alphabet = "abcdefghijklmnopqrstuvwxyz" * 2 # allow indexes > 26
if decoding: alphabet = alphabet[::-1] # reverse alphabet to decode
for letter in message:
letter_value = alphabet.find(letter) # will find 1st occurrence
if letter_value >= 0: # if it is in alphabet
letter = alphabet[letter_value + 10] # then translate it
translated_message += letter # assemble result
</code></pre>