Week1《情报密码锁》作业

本文介绍了一个能对中英文混合文本进行加密和解密的程序设计,使用ASCII码转换方法,适用于文件操作。代码实现了文件的读取、加密、解密和保存功能,展示了不同文件遍历技巧及终端字符颜色设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Week1《情报密码锁》作业

1. 作业内容

自己写一个加密程序,能够加密的内容是英文和汉字。同时加密并且解密 就是说,一段话中既有中文又有英文,标点符号不用处理。 加密规则,获取ascii码数字,中间用|分割

思路提示

print(ord("我"))

print(chr(25105))

扩展内容: 自定义规则玩起来

2. 代码实现

# 加密文件
def encode(old_filename, new_filename):
    with open(f'./{old_filename}', encoding='utf-8') as f1:
        old_chars = list(f1.read())
        new_chars = []
        for char in old_chars:
            t = ord(char)
            # 判断是否为英文字母或汉字
            if ('a' <= char <= 'z') | ('A' <= char <= 'Z') | (0x4e00 <= t <= 0x9fa5):
                new_chars.append(str(t))
            else:
                new_chars.append(char)
        result = '|'.join(new_chars)
        with open(f'./{new_filename}', 'w') as f2:
            f2.write(result)

# 解密文件
def decode(old_filename, new_filename):
    with open(f'./{old_filename}', 'r', encoding='utf-8') as f1:
        old_chars = f1.read().split('|')
        new_chars = []
        for char in old_chars:
            if char.isdigit():
                new_chars.append(chr(int(char)))
            else:
                new_chars.append(char)
        result = ''.join(new_chars)
        with open(f'./{new_filename}', 'w') as f2:
            f2.write(result)


if __name__ == '__main__':
    while True:
        print('-'*30, '请输入你想进行的操作:', '1. 加密文件', '2. 解密文件', '3. 退出', sep='\n')
        ans = input('请选择:')
        if ans == '1':
            file = input('请输入待加密文件名: ')
            new_file = input(r'请输入加密后文件名(.txt): ')
            try:
                encode(f'./{file}', f'{new_file}.txt')
                print('\033[0;32m', '加密成功,请到原目录下查看\n', '\033[0m', sep='')
            except FileNotFoundError:
                print('\033[0;31m', '输入文件名有误,请重新输入!', '\033[0m', sep='')
        elif ans == '2':
            file = input('请输入待解密文件名: ')
            new_file = input(r'请输入解密后文件名(.txt): ')
            try:
                decode(f'./{file}', f'{new_file}.txt')
                print('\033[0;32m', '解密成功,请到原目录下查看\n', '\033[0m', sep='')
            except FileNotFoundError:
                print('\033[0;31m', '输入文件名有误,请重新输入!', '\033[0m', sep='')
        elif ans == '3':
            break
        else:
            print('\033[0;31m', "无此选项,请重新输入!", '\033[0m', sep='')

3. 效果演示:

在这里插入图片描述

4. 知识点总结

  1. 文件遍历

    # 打开文件
    f = open('./test.txt', 'r')
    

    方法一:直接遍历

    for line in f:
    	print(line)
    

    方法二:.readline(), 一次读一行

    line = f.readline()
    while line:
        print(line)
        line = f.readline()
    

    方法三:.readlines(),一次读取所有行,返回一个列表

    lines = f.readlines()
    for line in lines:
        print(line)
    

    方法四:.read(),一次读取所有内容,返回一个字符串

    print(f.read())
    
  2. 终端字符颜色

终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关,shell,python,perl等均可以调用。 转义序列是以 ESC 开头,可以用 \033 完成相同的工作(ESC 的 ASCII 码用十进制表示就是 27, 用八进制表示是33)。

格式

\033[显示方式;前景色;背景色m

项目参数
显示方式0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、5(闪烁)、25(非闪烁)、7(反显)、27(非反显)
前景色(3_)0(黑色),1(红色),2(绿色), 3(黄色), 4(蓝色), 5(洋红), 6(青色), 7(白色)
背景色(4_)0(黑色),1(红色),2(绿色), 3(黄色), 4(蓝色), 5(洋红), 6(青色), 7(白色)

常用

  • \033[0m :默认 (黑底白色)
    \033[1;32;40m :黑底绿色
    \033[1;31;40m :黑底红色

  • 前景色

  • 背景色

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值