目的
- 它旨在为初级程序员提供编码实践和动力。
- 它适用于已学习基本语法并正在寻找编码练习的好材料的人。
(本文使用 Python,但可以很容易地用其他语言实现。)
编码练习的麻烦
您已经学习了变量、if 语句和 for 语句等基本语法,但您不担心下一步该做什么或如何练习吗?
编码基本上没有选择,只能掌握各种书写风格和模式的数字并习惯它,以便您可以自由使用它。
但是,如果你无法决定使用什么作为主题,那么在没有明确目的的情况下编写几行简单的代码就足够了,例如“当数字大于或等于时打印〇〇”。 .
解密对象
作为一种编码实践,以破译为主题怎么样?
其实我刚开始学编程的时候,是为了练习才写的,不过这个还是蛮有意思的。
更重要的是,我认为这是一个合适的主题,因为您可以在自己思考的同时学习经常使用的字符串操作和数组处理。
特别推荐Caesar cipher,它是最基本的密码,实现层次也比较简单。
凯撒密码
凯撒密码是一种单一的替换密码,众所周知,凯撒曾使用过“布鲁图斯,你也是”而闻名。也称为凯撒密码或移位密码。
密码学的机制很简单,对于明文(加密前的原始文本),每个字符都是预先准备好的(列出字符及其加密顺序的字典或表格),只需根据 替换(移位)字符即可。
根据规则,同一个字符总是被转换(唯一=单独)为固定字符(字符转换=替换),所以它是单替换密码。
例子
如果我们使用字母顺序并使用 shift number = 1 加密“apple”,我们得到:
苹果
↓ ↓ ↓ ↓ ↓
b q q q 米 f
加密脚本
下面是我实际用 Python 编写的凯撒密码加密脚本。
也可以先什么都不看,自己编码后再尝试对比内容,或者阅读代码,看看它在做什么处理。 (阅读别人的代码也是一个很重要的学习方法。)
我认为您可以复制整个内容并先检查操作。
- 该脚本应该由命令执行。
- 以“python encryption.py "{plaintext}" {number of shifts} 格式指定明文和班次数作为参数。
- 如果明文包含符号,除非用“”括起来,否则可能不会被处理。
- rule.py 中未列出的字符无法转换(“!”、“?”等)
- 如果移位次数超过规则长度,返回规则顶部,循环变换,
(例如,当移位数 = 1 时,“^”变为“a”。)
# 変換ルール(アルファベット)
ALPHABET = ["a", "b", "c", "d", "e", "f", "g", "h", "i",
"j", "k", "l", "m", "n", "o", "p", "q", "r",
"s", "t", "u", "v", "w", "x", "y", "z"]
# 変換ルール(記号)
MARK = [" ", ".", ",", "+", "-", "=", "/", "@", "#",
"$", "%", "&", "(", ")", "*", ":", ";", "<",
">", "_", "[", "]", "{", "}", "~", "'", "^"]
# 変換ルール
RULE = ALPHABET + MARK
# 変換ルール長
RULE_LENGTH = len(RULE)
import sys
from rule import RULE, RULE_LENGTH
# 暗号化
def encrypt(target_text, shift):
encrypt_text = ""
char_list = [char for char in target_text]
for c in char_list:
char_index = RULE.index(c)
new_index = char_index + shift
if new_index < RULE_LENGTH:
encrypt_text += RULE[new_index]
else:
re_index = new_index - RULE_LENGTH
encrypt_text += RULE[re_index]
return encrypt_text
def main(args):
target_text = args[1]
shift = int(args[2])
encrypt_text = encrypt(target_text, shift)
print(encrypt_text)
if __name__ == '__main__':
args = sys.argv
main(args)
执行结果
命令(输入)
python encryption.py "test" 5
输出
yjxy
下一步
由于是练习,我不会对上面的加密脚本进行过多的详细介绍。
每个流程和功能都只使用基础知识,因此如果您查看它,您将立即知道它在做什么。
另外,由于上面的脚本只实现了基本功能,我认为自己添加各种功能并玩弄它会很好。
例如,您可以在规则中添加字符,使它们对应大小写字母,使它们对应于日语。
并且,作为特别推荐的下一步,首先,由上述脚本创建的密码,解密脚本尝试创建
这很容易,因为过程没有太大变化,而且最重要的是,解密成功时有一点兴奋。
让我们破解密码!
所以让我们把代码留到最后。规则与上面的脚本相同。
加密的时候敢隐瞒班数,请大家尝试破译!
(提示:解密将在文本中的某处显示字符串“python”。)
nb]heusiou^ilusiolub]l~uqileuchu~'}cjb'lchaunb'u}i~'vusioub]p'uhiqucgjlip'~usiolujsnbihumecffmu{suih'ugil'uf'p'fvuf'n_mu}ihncho'uniu}b]ff'ha'up]lciomu}i~chau]h~uqileunia'nb'lv
我们正在积极招聘。
有很多人从无经验变成工程师,但他们非常活跃。
话虽如此,我也是在30岁之后换了工作,但幸运的是我被录用了,我每天都在学习的同时努力工作。
我们正在寻找有经验或没有经验的应届毕业生或职业中期,所以如果您有兴趣,这里请看。
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308626077.html