学校作业5_1字符串_文本分析与加密(头哥作业[Python])

 本系列文章为同学困扰的python做出作业答案汇总,答案皆为本学生自己边学边做汇总上传的,编排不易,希望大家喜欢。

本作业所有内容均在github上有留存,每次作业github上会最先发布,CSDN上需要编辑将会慢一两天,着急完成作业的同学可以前往github抢先学习:Opve2/homework: 这个作业 (github.com)

 1_统计字符数量

import string
# 读文件,返回字符串  
def read_file(file):  
    ##################Begin##################
    with open(file,'r',encoding='utf-8') as f:
        return f.read()
    ###################End###################

# 返回大写字母、小写字母、数字、空格和其他字符的数量  
def classify_char(txt):  
    ##################Begin##################
    upper,lower,digit,space,other = 0,0,0,0,0
    for ch in txt:
        if ch.islower():
            lower = lower + 1
        elif ch.isupper():
            upper = upper + 1
        elif ch.isnumeric():
            digit = digit + 1
        elif ch.isspace():
            space = space + 1
        else:
            other = other + 1
    return upper,lower,digit,space,other




    ###################End###################

if __name__ == '__main__':  
    filename = 'mayun.txt'  # 读取的文件名  
    text = read_file(filename)  # text为字符串  
    print(*classify_char(text))  

 2_统计单词数量

import string
# 读文件,返回字符串
def read_file(file):    
   with open(file, 'r', encoding='utf-8') as f:    
        return f.read()  


# 用空格替换所有符号,切分为列表
def word_list(txt):
    for ch in '!"#$%&()*+,-.:;<=>?@[\\]^_’‘{|}~/':
    #########################Begin############################### 
        txt = txt.replace(ch," ")    #所有符号替换为空格
    #print(txt)
    return txt.split()


    #########################End############################### 

    


# 返回单词数量
def number_of_words(ls):
    #########################Begin############################### 
    word = 0
    for sh in ls:
        if sh.isalnum():
            word += 1
    return word

    #########################End############################### 

if __name__ == '__main__':
    filename = 'mayun.txt'  # 读取的文件名
    text = read_file(filename)  # text为字符串
    words_list = word_list(text)  # 单词的列表
    words_counts = number_of_words(words_list)
    print(f'共有{words_counts}单词')

 3_计算偏移量

import string

# 用字符串中字符ASCII值的和对26取模为偏移量
def offset_cal(day):
    #########################Begin############################### 
    sum_of_ch = 0
    for c in day:
        sum_of_ch = sum_of_ch +ord(c)
    offset = sum_of_ch % 26
    return offset


    #########################End############################### 


if __name__ == '__main__':
    secret_word = input()
    offset_number = offset_cal(secret_word)
    print(offset_number)

4_凯撒密码加密

import string
# 读文件,返回字符串  
def read_file(file):  
    with open(file, 'r', encoding='utf-8') as f:  
        return f.read()

# 用字符串中字符ASCII值的和对26取模为偏移量  
def offset_cal(day):  
    sum_of_ch = 0  
    for c in day:  
        sum_of_ch = sum_of_ch + ord(c)  
    offset = sum_of_ch % 26  
    return offset

def kaisa(txt, number):  
    ###########################Begin###########################
    lower = string.ascii_lowercase  #小写字母
    upper = string.ascii_uppercase  #大写字母
    before = string.ascii_letters
    after = lower[number:] + lower[:number] + upper[number:] +upper[:number]
    table = ''.maketrans(before,after)  #创建映射表
    return txt.translate(table)



    ############################End############################

if __name__ == '__main__':  
    filename = 'mayun.txt'  # 读取的文件名  
    text = read_file(filename)  # text为字符串  
    secret_word = input()  
    offset_number = offset_cal(secret_word)  
    print(kaisa(text, offset_number))  

  • 10
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
里提供了三种Python中常用的加密解密字符串的方法:DES、RSA和AES。 1. DES加密解密: 使用Crypto.Cipher库中的DES模块,需要注意的是,密钥必须为8位或16位bytes类型,加密文本必须为8的倍数。具体代码实现可以参考引用中的DesUtil类。 2. RSA加密解密: 使用rsa库进行加密解密,需要生成公钥和私钥,具体代码实现可以参考引用中的rsacrypt类。 3. AES加密解密: 使用pycryptodome库中的AES模块,需要注意的是,密钥必须为16、24或32位bytes类型,加密文本可以为任意长度。具体代码实现可以参考以下示例: ``` from Crypto.Cipher import AES import base64 class AesUtil(): """ AES加密解密 """ key = b'1234567890123456' # 密钥 16、24或32位bytes类型 iv = b'1234567890123456' # 初始向量 16位bytes类型 def __init__(self): self.aes = AES.new(self.key, AES.MODE_CBC, self.iv) # 创建一个AES实例 def pad(self, text): """ 加密函数,如果text不是16的倍数,那就补足为16的倍数 :param text: :return: """ while len(text) % 16 != 0: text += b' ' return text def encrypt(self, text): padded_text = self.pad(text) encrypted_text = self.aes.encrypt(padded_text) # 把加密后的字符串转化为base64编码的字符串 return base64.b64encode(encrypted_text).decode() def decrypt(self, text): # 先把base64编码的字符串转化为bytes类型 encrypted_text = base64.b64decode(text.encode()) decrypted_text = self.aes.decrypt(encrypted_text).rstrip(b' ') return decrypted_text.decode() aes = AesUtil() enc = aes.encrypt(b"我是一个兵!") print("加密后:%s" % enc) dec = aes.decrypt(enc) print("解密后:%s" % dec) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值