集合翻转教学

第1关:统计小说单词数量

编程要求

根据提示,在右侧编辑器补充代码,输入小说文件名,统计并输出小说中的单词数量。

import string
 
 
def file_to_str(file):
    """将文件名变量file指向的文件读为字符串,全部字母转为小写,返回字符串"""
    # 补充你的代码
    with open(file, 'r', encoding='utf-8') as f:  # 创建文件对象
        txt = f.read()  # 读取文件为一个字符串
    return txt.lower()   # 返回字符串,其中字母全部转为小写
 
 
def file_to_lst(txt):
    """替换掉字符串txt中的符号和数字,根据空格切分为列表,返回列表"""
    # 补充你的代码
    for c in string.punctuation:   # 遍历符号集
        txt = txt.replace(c, ' ')  # 将全部符号都替换为空格
    words_ls = txt.split()         # 根据空白字符切分为列表
    return words_ls                # 返回列表
 
 
if __name__ == '__main__':
    filename = input()                   # 输入文件名
    path = '/data/bigfiles/'             # 文件存放路径
    text = file_to_str(path + filename)  # 读文件返回字符串
    words_lst = file_to_lst(text)        # 字符串切分为列表
    print(len(words_lst))                # 输出列表长度

 

第2关:统计小说中不重复单词数量

编程要求

根据提示,在右侧编辑器补充代码,输入小说文件名,统计并输出小说中不重复的单词数量。

import string
 
 
def file_to_str(file):
    """将文件名变量file指向的文件读为字符串,全部字母转为小写"""
    # 补充你的代码
    with open(file, 'r', encoding='utf-8') as f:  # 创建文件对象
        txt = f.read()  # 读取文件为一个字符串
    return txt.lower()   # 返回字符串,其中字母全部转为小写
 
def file_to_lst(txt):
    """将文件名变量file指向的文件读为字符串,全部字母转为小写,
    替换掉其中的符号和数字,根据空格切分为列表,返回列表"""
    # 补充你的代码
    for c in string.punctuation:   # 遍历符号集
        txt = txt.replace(c, ' ')  # 将全部符号都替换为空格
    words_ls = txt.split()         # 根据空白字符切分为列表
    return words_ls                # 返回列表
 
 
def no_repeat(words_ls):
    """接收列表为参数,去除里面的重复单词,保持原来单词出现的顺序,返回列表"""
    # 补充你的代码
    words_no_repeat = set(words_ls)  # 去掉重复单词,返回值为集合
    return words_no_repeat  # 返回集合
 
if __name__ == '__main__':
    filename = input()             # 输入文件名
    path = '/data/bigfiles/'         # 文件存放路径
    text = file_to_str(path + filename)  # 读文件返回字符串
    words_lst = file_to_lst(text)      # 字符串切分为列表
    print(len(no_repeat(words_lst)))    # 输出集合长度

第3关:列表去掉重复元素后保持各元素出现的先后次序不变

编程要求

根据提示,在右侧编辑器补充代码,输入小说文件名和一个正整数n,返回去不重复的前n个单词的列表,列表中元素顺序与在小说中出现次序相同。

import string
 
def file_to_str(file):
    """将文件名变量file指向的文件读为字符串,全部字母转为小写"""
    # 补充你的代码
    with open(file, 'r', encoding='utf-8') as f:  # 创建文件对象
        txt = f.read()  # 读取文件为一个字符串
    return txt.lower()   # 返回字符串,其中字母全部转为小写
 
 
def file_to_lst(txt):
    """替换掉字符串中的符号和数字,根据空白字符切分为列表,返回列表"""
    # 补充你的代码
    for c in string.punctuation:   # 遍历符号集
        txt = txt.replace(c, ' ')  # 将全部符号都替换为空格
    words_ls = txt.split()         # 根据空白字符切分为列表
    return words_ls                # 返回列表
 
 
def no_repeat(words_ls):
    """接收列表为参数,去除里面的重复单词,保持原来单词出现的顺序,返回列表"""
    # 补充你的代码
    words_no_repeat = list(set(words_ls))  # 去掉重复单词,返回值为列表
    return sorted(words_no_repeat, key=lambda x: words_ls.index(x))  # 返回列表 根据元素在列表中出现的序号排序
   
 
if __name__ == '__main__':
    filename = input()             # 输入文件名
    n = int(input())               # 输入一个正整数n
    path = '/data/bigfiles/'         # 文件存放路径
    text = file_to_str(path + filename)  # 读文件返回字符串
    words_lst = file_to_lst(text)      # 字符串切分为列表
    print(no_repeat(words_lst)[:n])    # 输出不重复的前n个单词的子列表

第4关:输出两本小说中共存的单词数量

编程要求

根据提示,在右侧编辑器补充代码,在两行中分别输入两本小说文件名,统计并输出两本小说中共存的单词数量,重复单词只统计一次。

import string
 
 
def file_to_set(file):
    """将文件名变量file指向的文件读为字符串,全部字母转为小写。
    替换掉字符串中的符号,根据空白字符切分为列表,转为集合类型。"""
    path = '/data/bigfiles/'       # 文件路径
    with open(path+file, 'r', encoding='utf-8') as fr:  # 创建文件对象
        txt = fr.read().lower()    # 读取文件为一个字符串,其中字母全部转为小写
    # 补充你的代码
    for c in string.punctuation:   # 遍历符号集
        txt = txt.replace(c, ' ')  # 将全部符号都替换为空格
    words_ls = txt.split()         # 根据空白字符切分为列表
    return words_ls
 
def words_both(file1, file2):
    """接收两个文件名为参数,返回两个文件中共同存在的单词,相同单词只计算一次"""
    # 补充你的代码
    file1 = {i for i in file_to_set(file1)}
    file2 = {i for i in file_to_set(file2)}
    file3 = file1 & file2
    return file3
 
 
if __name__ == '__main__':
    filename1 = input()  # 输入文件名
    filename2 = input()  # 输入文件名
    print(len(words_both(filename1, filename2)))

第5关:输出两本小说中出现的所有单词数量

编程要求

根据提示,在右侧编辑器补充代码,在两行中分别输入两本小说文件名,统计并输出两本小说中出现的所有单词数量,重复单词只统计一次。

import string
 
 
def file_to_set(file):
    """将文件名变量file指向的文件读为字符串,全部字母转为小写。
    替换掉字符串中的符号,根据空白字符切分为列表,转为集合类型。"""
    path = '/data/bigfiles/'       # 文件路径
    with open(path+file, 'r', encoding='utf-8') as fr:  # 创建文件对象
        txt = fr.read().lower()    # 读取文件为一个字符串,其中字母全部转为小写
    # 补充你的代码
    for c in string.punctuation:   # 遍历符号集
        txt = txt.replace(c, ' ')  # 将全部符号都替换为空格
    words_ls = txt.split()         # 根据空白字符切分为列表
    return words_ls                # 返回列表
 
 
def words_all(file1, file2):
    """接收两个文件名为参数,返回两个文件中出现的所有单词,相同单词只计算一次"""
    # 补充你的代码
    file1 = {i for i in file_to_set(file1)}
    file2 = {i for i in file_to_set(file2)}
    file3 = file1 | file2
    return file3
 
if __name__ == '__main__':
    filename1 = input()  # 输入文件名
    filename2 = input()  # 输入文件名
    print(len(words_all(filename1, filename2)))

第6关:统计仅在第一本小说中出现的单词数量

编程要求

根据提示,在右侧编辑器补充代码,在两行中分别输入两本小说文件名,统计并输出仅在第一本小说中出现且在第二本小说中未出现的单词数量,重复单词只统计一次。

import string
 
 
def file_to_set(file):
    """将文件名变量file指向的文件读为字符串,全部字母转为小写。
    替换掉字符串中的符号,根据空白字符切分为列表,转为集合类型。"""
    path = '/data/bigfiles/'       # 文件路径
    with open(path+file, 'r', encoding='utf-8') as fr:  # 创建文件对象
        txt = fr.read().lower()    # 读取文件为一个字符串,其中字母全部转为小写
    # 补充你的代码
    for c in string.punctuation:   # 遍历符号集
        txt = txt.replace(c, ' ')  # 将全部符号都替换为空格
    words_ls = txt.split()         # 根据空白字符切分为列表
    return words_ls
 
 
def only_in_first(file1, file2):
    """接收两个文件名为参数,返回仅在第一本小说中出现且在第二本小说中未出现的单词集合,相同单词只计算一次"""
    # 补充你的代码
    file1 = {i for i in file_to_set(file1)}
    file2 = {i for i in file_to_set(file2)}
    file3 = file1 - file2
    return file3
 
if __name__ == '__main__':
    filename1 = input()  # 输入文件名
    filename2 = input()  # 输入文件名
    print(len(only_in_first(filename1, filename2)))

 

第7关:统计未同时在两本小说中出现的单词数量

编程要求

根据提示,在右侧编辑器补充代码,在两行中分别输入两本小说文件名,统计并输出统计两本小说中出现的单词中未同时在两本书中出现的单词数量,重复单词只统计一次。

import string
 
 
def file_to_set(file):
    """将文件名变量file指向的文件读为字符串,全部字母转为小写。
    替换掉字符串中的符号,根据空白字符切分为列表,转为集合类型。"""
    path = '/data/bigfiles/'       # 文件路径
    with open(path+file, 'r', encoding='utf-8') as fr:  # 创建文件对象
        txt = fr.read().lower()    # 读取文件为一个字符串,其中字母全部转为小写
    # 补充你的代码
    for c in string.punctuation:   # 遍历符号集
        txt = txt.replace(c, ' ')  # 将全部符号都替换为空格
    words_ls = txt.split()         # 根据空白字符切分为列表
    return words_ls
 
 
def only_in_one(file1, file2):
    """接收两个文件名为参数,返回仅在一个小说中存在,不在两个文件中共同存在的单词,相同单词只计算一次"""
    # 补充你的代码
    file1 = {i for i in file_to_set(file1)}
    file2 = {i for i in file_to_set(file2)}
    file3 = file1 ^ file2
    return file3
 
 
if __name__ == '__main__':
    filename1 = input()  # 输入文件名
    filename2 = input()  # 输入文件名
    print(len(only_in_one(filename1, filename2)))

 

 

 

 

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值