<p>凯撒密码是一个非常好的密码。它计算出前15个字母等于<code>letter_position + 10</code>。但是我完全理解你在使用<code>%</code>符号时的困惑</p>
<p>但让我来解释一下数学:</p>
<p>对于前15个字母,对应的字母是其在字母表中的位置加上10个点。让我们以字母<code>i</code>为例</p>
<pre><code>#'i' is the 8th letter of the alphabet
letter = 'i'
pos = 8
translated_pos = pos + 10
#translated_pos = 18
</code></pre>
<p>这就是<code>%</code>的作用所在。
尽管将其放入计算器,您会发现结果除法<code>18 / 26</code>的结果是一个小数字,小于1</p>
<p>这是使用模规则之一的地方:</p>
<pre><code>Let *a mod b*
Where *b > a > 0* then *a mod b = a*
</code></pre>
<p>这意味着对于所有小于16的数字(当加上10时小于26),它在字母表中的位置相同</p>
<p>现在对于代码中<code>p</code>之后的任何字母:
模计算实际上非常简单</p>
<p>让我们以字母<code>w</code>为例</p>
<pre><code>#'w' is the 22nd letter of the alphabet.
letter = 'w'
pos = 22
translated_pos = pos + 10
#translated_pos = 32
</code></pre>
<p>要找到32的mod 26,从32中减去26,直到得到的数字小于0(等于零就可以了)。剩下多少是你的模方程的答案</p>
<pre><code>start = 32
step = 26
32 - 26 = 6
6 - 26 = -20 #Too far
#This gives the corresponding letter of 22 (w) to 6 (g) the remainder of the first equation
</code></pre>
<p>如果您想更轻松地编写自己的消息,我使用python制作了一个快速字典</p>
<pre class="lang-py prettyprint-override"><code>alphabet = " abcdefghijklmnopqrstuvwxyz"
message = "abcdefghijklmnopqrstuvwxyz"
for letter in message:
letter_value = alphabet.find(letter)
print(letter_value, letter, (letter_value+10) % 26, alphabet[(letter_value + 10) % 26])
</code></pre>