87
87
88
88
* 图 7-4:给每个盒子加上索引号,从 0 开始。*
89
89
90
- 这些方框显示第一列具有索引` 0 ` 、` 8 ` 、` 16 ` 和` 24 ` 处的字符(它们是` 'C' ` 、` 'e' ` 、` 'n' ` 和` 'o' ` ) 。下一列具有索引` 1 ` 、` 9 ` 、` 17 ` 和` 25 ` 处的字符(它们是` 'o' ` 、` 'n' ` 、` 'o' ` 和` 'm' ` ) 。注意出现的模式:第` n ` 列包含字符串中索引为 0+( ` n ` –1)、8+( ` n ` –1)、16+( ` n ` –1)、24+( ` n ` –1) 的所有字符,如图 7-5 所示。
90
+ 这些方框显示第一列具有索引` 0 ` 、` 8 ` 、` 16 ` 和` 24 ` 处的字符(它们是` 'C' ` 、` 'e' ` 、` 'n' ` 和` 'o' ` ) 。下一列具有索引` 1 ` 、` 9 ` 、` 17 ` 和` 25 ` 处的字符(它们是` 'o' ` 、` 'n' ` 、` 'o' ` 和` 'm' ` ) 。注意出现的模式:第` n ` 列包含字符串中索引为` 0 + (n – 1) ` 、 ` 8 + (n – 1) ` 、 ` 16 + (n – 1) ` 、 ` 24 + (n – 1) ` 的所有字符,如图 7-5 所示。
91
91
92
92
![ Images] ( img/5e60db99cd44e2c323995bdb13dc7deb.png )
93
93
94
94
* 图 7-5:每个盒子的索引遵循一个可预测的模式。*
95
95
96
- 第 7 列和第 8 列的最后一行有一个例外,因为 24+(7–1)和 24+(8–1)将大于 29,这是字符串中最大的索引。在这些情况下,你只需将 0、8 和 16 加到` n ` (并跳过 24) 。
96
+ 第 7 列和第 8 列的最后一行有一个例外,因为` 24+(7–1) ` 和 ` 24+(8–1) ` 将大于 29,这是字符串中最大的索引。在这些情况下,你只需将 0、8 和 16 加到` n ` (并跳过 24) 。
97
97
98
- 数字 0、8、16 和 24 有什么特别的?这些是从 0 开始添加密钥(在本例中是 8) 时得到的数字。所以,0 + 8 是 8,8 + 8 是 16,16 + 8 是 24。24 + 8 的结果将是 32,但是因为 32 比消息的长度大,所以您将在 24 处停止。
98
+ 数字 0、8、16 和 24 有什么特别的?这些是从 0 开始添加密钥(在本例中是 8) 时得到的数字。所以,0 + 8 是 8,8 + 8 是 16,16 + 8 是 24。24 + 8 的结果将是 32,但是因为 32 比消息的长度大,所以您将在 24 处停止。
99
99
100
- 对于第` n ` 列的字符串,从索引(` n ` –1) 开始,继续加 8(键)得到下一个索引。只要索引小于 30(消息长度),就一直加 8,此时移到下一列。
100
+ 对于第` n ` 列的字符串,从索引(` n–1 ` ) 开始,继续加 8(键)得到下一个索引。只要索引小于 30(消息长度),就一直加 8,此时移到下一列。
101
101
102
102
如果您将每一列想象成一个字符串,那么结果将是一个包含八个字符串的列表,如下所示:` 'Ceno' ` 、` 'onom' ` 、` 'mstm' ` 、` 'me o' ` 、` 'o sn' ` 、` 'nio.' ` 、` ' s ' ` 、` 's c' ` 。如果您按顺序将字符串连接在一起,结果将是密文:` 'Cenoonommstmme oo snnio. s s c' ` 。在这一章的后面,你会学到一个叫做* 列表* 的概念,它会让你做到这一点。
103
103
@@ -164,7 +164,7 @@ if __name__ == '__main__':
164
164
Cenoonommstmme oo snnio. s s c|
165
165
```
166
166
167
- 竖线字符(` | ` ) 标记密文的结尾,以防结尾有空格。这个密文(末尾没有管道字符)也被复制到剪贴板,因此您可以将它粘贴到给某人的电子邮件中。如果您想要加密不同的消息或使用不同的密钥,请更改第 7 行和第 8 行中分配给` myMessage ` 和` myKey ` 变量的值。然后再次运行该程序。
167
+ 竖线字符(` | ` ) 标记密文的结尾,以防结尾有空格。这个密文(末尾没有管道字符)也被复制到剪贴板,因此您可以将它粘贴到给某人的电子邮件中。如果您想要加密不同的消息或使用不同的密钥,请更改第 7 行和第 8 行中分配给` myMessage ` 和` myKey ` 变量的值。然后再次运行该程序。
168
168
169
169
### 用 def 语句创建自己的函数
170
170
@@ -279,7 +279,7 @@ def main():
279
279
pyperclip.copy(ciphertext)
280
280
```
281
281
282
- 该程序在消息的末尾打印一个管道字符(` | ` ) ,这样用户就可以看到密文末尾的任何空格字符。
282
+ 该程序在消息的末尾打印一个管道字符(` | ` ) ,这样用户就可以看到密文末尾的任何空格字符。
283
283
284
284
第 18 行是` main() ` 功能的最后一行。在它执行之后,程序执行返回到调用它的行之后的行。
285
285
@@ -406,7 +406,7 @@ TypeError: 'str' object does not support item assignment
406
406
407
407
` spam[0] ` 的值评估为列表` ['dog', 'cat'] ` ,它有自己的索引。用于` spam[0][0] ` 的双索引括号表示我们从第一个列表中取出第一个项目:` spam[0] ` 计算为` ['dog', 'cat'] ` ,` ['dog', 'cat'][0] ` 计算为` 'dog' ` 。
408
408
409
- #### 使用 len()和 in 运算符使用列表
409
+ #### 使用` len() ` 和 ` in ` 运算符使用列表
410
410
411
411
您已经使用了` len() ` 来表示字符串中的字符数(即字符串的长度)。` len() ` 函数也作用于列表值,并返回列表中项目数的整数。
412
412
@@ -541,7 +541,7 @@ TypeError: 'str' object does not support item assignment
541
541
542
542
对于每一列,` while ` 循环遍历原始的` message ` 变量,并通过将` key ` 加到` currentIndex ` 中来挑选出` key ` 间隔中的字符。在第 27 行上,对于` for ` 循环的第一次迭代,` currentIndex ` 被设置为从` 0 ` 开始的` column ` 的值。
543
543
544
- 如图 7-7 中的所示,` message[currentIndex] ` 是` message ` 第一次迭代的第一个字符。在` message[currentIndex] ` T13 的字符被连接到` ciphertext[column] ` 以在第 33 行开始第一列。第 36 行每次通过循环将` key ` (即` 8 ` ) 中的值添加到` currentIndex ` 。第一次是` message[0] ` ,第二次` message[8] ` ,第三次` message[16] ` ,第四次` message[24] ` 。
544
+ 如图 7-7 中的所示,` message[currentIndex] ` 是` message ` 第一次迭代的第一个字符。在` message[currentIndex] ` T13 的字符被连接到` ciphertext[column] ` 以在第 33 行开始第一列。第 36 行每次通过循环将` key ` (即` 8 ` ) 中的值添加到` currentIndex ` 。第一次是` message[0] ` ,第二次` message[8] ` ,第三次` message[16] ` ,第四次` message[24] ` 。
545
545
546
546
![ Images] ( img/42a30d5cb60371901b1b30d55a9eddb0.png )
547
547
@@ -559,7 +559,7 @@ TypeError: 'str' object does not support item assignment
559
559
560
560
当` for ` 循环完成其余列的循环后,` ciphertext ` 中的值为` ['Ceno', ` ` 'onom', ` ` 'mstm', ` ` 'me o', ` ` 'o sn', ` ` 'nio.', ` ` ' s ', ` ` 's c'] ` 。有了字符串列的列表后,我们需要将它们连接在一起,形成一个字符串,这就是整个密文:` 'Cenoonommstmme oo snnio. s s c' ` 。
561
561
562
- ### join()字符串方法
562
+ ### ` join() ` 字符串方法
563
563
564
564
第 39 行使用了` join() ` 方法将` ciphertext ` 的各个列字符串连接成一个字符串。对一个字符串值调用` join() ` 方法,并获取一个字符串列表。它返回一个字符串,列表中的所有成员都由调用` join() ` 的字符串连接。(如果您只想将字符串连接在一起,这是一个空白字符串。)在交互式 shell 中输入以下内容:
565
565
@@ -634,7 +634,7 @@ if __name__ == '__main__':
634
634
635
635
当您导入一个 Python 程序时,在程序执行之前,` __name__ ` 变量被设置为文件名的 before 部分。` py ` 。当` transpositonecrypt.py ` 程序被导入时,所有的` def ` 语句都被运行(以定义导入程序想要使用的` encryptMessage() ` 函数),但是` main() ` 函数没有被调用,所以` 'Common ` ` sense ` ` is ` ` not ` ` so ` ` common.' ` 的带密钥` 8 ` 的加密代码没有被执行。
636
636
637
- 这就是为什么用` myKey ` 密钥加密` myMessage ` 字符串的代码在一个函数内部(这个函数按照惯例被命名为` main() ` ) 。当` transpositonecrypt.py ` 被其他程序导入时` main() ` 里面的这段代码不会运行,但是这些其他程序仍然可以调用它的` encryptMessage() ` 函数。这就是函数的代码可以被其他程序重用的方式。
637
+ 这就是为什么用` myKey ` 密钥加密` myMessage ` 字符串的代码在一个函数内部(这个函数按照惯例被命名为` main() ` ) 。当` transpositonecrypt.py ` 被其他程序导入时` main() ` 里面的这段代码不会运行,但是这些其他程序仍然可以调用它的` encryptMessage() ` 函数。这就是函数的代码可以被其他程序重用的方式。
638
638
639
639
> ** 注**
640
640
>
0 commit comments