实验4:列表与字典应用

目的 :熟练操作组合数据类型。
试验任务:


1. 基础:生日悖论分析。如果一个房间有23人或以上,那么至少有两个人的生日相同的概率大于50%。编写程序,输出在不同随机样本数量下,23 个人中至少两个人生日相同的概率。

import randomdef has_duplicate_birthdays():birthdays = [random.randint(1, 365) for _ in range(23)]return len(set(birthdays)) < 23def calculate_probability(sample_size):duplicate_count = 0for _ in range(sample_size):if has_duplicate_birthdays():duplicate_count += 1return duplicate_count / sample_sizesample_sizes = [100, 1000, 10000, 100000]
for size in sample_sizes:probability = calculate_probability(size)print(f"样本数量为 {size} 时,23个人中至少两个人生日相同的概率是: {probability * 100:.2f}%")

运行结果:


2. 进阶:统计《一句顶一万句》文本中前10高频词,生成词云。

import jieba
from collections import Counter
from wordcloud import WordCloud
import matplotlib.pyplot as pltdef read_text(file_path):try:with open(file_path, 'r', encoding='GB18030') as file:return file.read()except FileNotFoundError:print(f"错误:未找到文件 {file_path}。")return Nonedef preprocess_text(text):# 加载停用词(包含单字和无意义词语)stopwords = set()try:with open('stopwords.txt', 'r', encoding='GB18030') as f:for line in f:stopwords.add(line.strip())except FileNotFoundError:print("警告:未找到停用词文件 'stopwords.txt',将不进行停用词过滤。")# 分词并过滤:保留长度>=2的词语,排除停用词和空字符串words = jieba.lcut(text)filtered_words = [word for word in wordsif len(word) >= 2 and word not in stopwords and word.strip()]return filtered_wordsdef get_top_10_words(words):word_count = Counter(words)top_10 = word_count.most_common(10)return top_10def generate_wordcloud(words):text = ' '.join([word for word, _ in words])# 使用中文字体(需确保字体文件存在,可替换为系统字体路径)wordcloud = WordCloud(font_path='simhei.ttf',background_color='white',width=800,height=400).generate(text)plt.imshow(wordcloud, interpolation='bilinear')plt.axis('off')plt.show()if __name__ == "__main__":file_path = "C:/Users/Administrator/Downloads/一句顶一万句(www.mkdzs.com).txt"text = read_text(file_path)if text:processed_words = preprocess_text(text)top_10 = get_top_10_words(processed_words)print("前 10 个高频词:")for word, freq in top_10:print(f"{word}: {freq}")generate_wordcloud(top_10)

运行结果:


3. 拓展:金庸、古龙等武侠小说写作风格分析。输出不少于3个金庸(古龙)作品的最常用10个词语,找到其中的相关性,总结其风格。

金庸小说:

import jieba
from collections import Counter
import osdef load_stopwords():"""加载停用词"""stopwords = set()with open('stopwords.txt', 'r', encoding='utf-8') as f:for line in f:stopwords.add(line.strip())return stopwordsdef process_text(text, stopwords):"""处理文本,返回过滤后的词语列表(仅保留双字及以上)"""words = jieba.lcut(text)return [word for word in words if len(word) >= 2 and word not in stopwords]def get_top_words(words, n=10):"""获取高频词语"""return Counter(words).most_common(n)def main():stopwords = load_stopwords()jinyong_works = ["C:/Users/Administrator/Downloads/射雕英雄传.txt", 'C:/Users/Administrator/Downloads/天龙八部.txt', 'C:/Users/Administrator/Downloads/笑傲江湖.txt']# 输出单部作品高频词for work in jinyong_works:if not os.path.exists(work):print(f"错误:未找到文件 {work}")continuewith open(work, 'r', encoding='GB18030') as f:text = f.read()words = process_text(text, stopwords)top_10 = get_top_words(words)print(f"\n{work} 前 10 高频词:")for word, freq in top_10:print(f"{word}: {freq}")# 合并三部作品统计高频词all_words = []for work in jinyong_works:with open(work, 'r', encoding='GB18030') as f:text = f.read()words = process_text(text, stopwords)all_words.extend(words)global_top = get_top_words(all_words)print("\n三部作品合并前 10 高频词:")for word, freq in global_top:print(f"{word}: {freq}")# 总结风格print("\n【金庸作品写作风格分析】")print("相关性:单部作品高频词如‘江湖’‘郭靖’‘黄蓉’等人物与门派、武功相关词汇,与合并后的高频词高度相关,均围绕武侠世界的核心元素,体现金庸作品对人物塑造、门派纷争和武功体系的着重刻画。")print("风格总结:")print("- **构建宏大江湖格局**:通过‘江湖’‘门派’‘天下’等词,展现复杂的武林秩序与势力纷争,如各大门派(少林、武当等)在江湖中的地位与纷争。")print("- **强调侠义精神与人物塑造**:‘大侠’‘英雄’等词体现对‘侠之大者,为国为民’的推崇,同时对主角(如郭靖、乔峰)的刻画细致入微,通过高频人物名展现人物影响力。")print("- **武功体系与情节严谨**:对武功(‘九阴真经’‘降龙十八掌’等)的描写细致,情节跌宕且逻辑严密,通过‘比武’‘较量’等隐含词汇展现江湖中的武功较量与成长线。")print("- **语言典雅古朴**:虽代码未直接体现,但结合作品可知,其语言风格符合传统武侠的典雅,在人物对话与场景描写中体现深厚文化底蕴。")if __name__ == "__main__":main()

运行结果:

古龙小说:

import jieba
from collections import Counter
import osdef load_stopwords():"""加载停用词"""stopwords = set()with open('stopwords.txt', 'r', encoding='utf - 8') as f:for line in f:stopwords.add(line.strip())return stopwordsdef process_text(text, stopwords):"""处理文本,返回过滤后的词语列表(仅保留双字及以上)"""words = jieba.lcut(text)return [word for word in words if len(word) >= 2 and word not in stopwords]def get_top_words(words, n = 10):"""获取高频词语"""return Counter(words).most_common(n)def main():stopwords = load_stopwords()gulong_works = ['C:/Users/Administrator/Downloads/多情剑客无情剑.txt', 'C:/Users/Administrator/Downloads/楚留香传奇.txt', "C:/Users/Administrator/Downloads/陆小凤传奇.txt"]# 输出单部作品高频词for work in gulong_works:if not os.path.exists(work):print(f"错误:未找到文件 {work}")continuewith open(work, 'r', encoding='GB18030') as f:text = f.read()words = process_text(text, stopwords)top_10 = get_top_words(words)print(f"\n{work} 前 10 高频词:")for word, freq in top_10:print(f"{word}: {freq}")# 合并三部作品统计高频词all_words = []for work in gulong_works:with open(work, 'r', encoding='GB18030') as f:text = f.read()words = process_text(text, stopwords)all_words.extend(words)global_top = get_top_words(all_words)print("\n三部作品合并前 10 高频词:")for word, freq in global_top:print(f"{word}: {freq}")# 总结风格print("\n【古龙作品写作风格分析】")print("相关性:单部作品高频词如‘江湖’‘浪子’‘一笑’等,与合并后的高频词高度相关,均围绕江湖中的人物性情、独特行事风格与情感基调,体现古龙作品对江湖个体命运与情感的聚焦。")print("风格总结:")print("- **江湖与浪子情怀**:高频词‘江湖’‘浪子’凸显其作品多围绕江湖中浪子形象展开(如李寻欢、楚留香),这些人物自由不羁却又受江湖恩怨羁绊,传达出‘人在江湖,身不由己’的宿命感,构建了一个充满传奇与无奈的江湖世界。")print("- **语言简洁诗意**:常用‘一笑’‘寂寞’‘孤独’等词,语言简洁明快且富有诗意,大量使用短句(受海明威‘电报体’影响),节奏紧凑,同时蕴含哲理(如‘笑红尘,红尘笑,笑尽人间独寂寥’),给读者留下想象空间。")print("- **人物个性鲜明**:通过‘英雄’‘怪人’‘剑客’等词,塑造出一批个性独特的人物形象(如陆小凤的机智洒脱、西门吹雪的冷傲孤僻),人物形象突破传统武侠的单一模式,更具现代性与复杂性。")print("- **情节奇险悬疑**:虽代码未直接体现,但古龙常将悬疑、推理元素融入武侠情节(如《楚留香传奇》中的探案情节),以‘奇险’‘突变’推动故事发展,打破常规叙事节奏,满足读者对新奇与刺激的阅读需求。")if __name__ == "__main__":main()

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++之网络编程

网络编程&#xff1a;使得计算机程序能够在网络中发送和接受数据&#xff0c;从而实现分布式系统和网络服务的功能。 作用&#xff1a;使应用程序能够通过网络协议与其他计算机程序进行数据交换 基本概念 套接字&#xff08;socket&#xff09;&#xff1a; 套接字是网络通信…

【Harmony_Bug】forEach + asyncawait 的异步陷阱

一、问题描述 今天在做一个RDB的小项目时&#xff0c;遇到一个问题&#xff0c;因为没报错其实也是不算是BUG&#xff0c;以下描述时我就直接说关键点&#xff0c;其他代码忽略。 我的数据模型初始化有六条数据如图 在持久化层&#xff0c;通过initUserData这个方法执行插入。…

大肠杆菌诱导蛋白时OD600=0.6-0.8添加IPTG的思考-实验操作系列-009

一、为什么用OD600表示菌液浓度&#xff1f; 1. 光密度与吸光值的关系 OD600是指在600纳米波长下的光密度&#xff08;Optical Density&#xff09;&#xff0c;也就是通过细菌悬浮液的光的吸收程度。根据比尔-朗伯定律&#xff0c;光密度与溶液中光学活性物质&#xff08;如…

OpenHarmony - 小型系统内核(LiteOS-A)(十),魔法键使用方法,用户态异常信息说明

OpenHarmony - 小型系统内核&#xff08;LiteOS-A&#xff09;&#xff08;十&#xff09; 十四、魔法键使用方法 使用场景 在系统运行出现无响应等情况时&#xff0c;可以通过魔法键功能确定系统是否被锁中断&#xff08;魔法键也无响应&#xff09;或者查看系统任务运行状态…

CUDA编程之Grid、Block、Thread线程模型

一、线程模型:Grid、Block、Thread概念 ‌1. 层级定义‌ ‌Thread(线程)‌ CUDA中最基本的执行单元,对应GPU的单个CUDA核心(SP)。每个线程独立执行核函数指令,拥有独立的寄存器和局部内存空间‌。 ‌Block(线程块)‌ 由多个线程组成(通常为32的倍数),是逻辑上的并…

实战交易策略 篇十九:君山居士熊市交易策略

文章目录 系列文章熊市三大特征熊市操作思维强势重势,弱势重质抢反弹重要前提和五大原则反弹逃顶操盘其他炒股的至高境界力戒“三进三出”八大心理误区八大戒律股市不败之法系列文章 实战交易策略 篇一:奥利弗瓦莱士短线交易策略 实战交易策略 篇二:杰西利弗莫尔股票大作手…

Flutter IOS 真机 Widget 错误。Widget 安装后系统中没有

错误信息&#xff1a; SendProcessControlEvent:toPid: encountered an error: Error Domaincom.apple.dt.deviceprocesscontrolservice Code8 "Failed to show Widget com.xxx.xxx.ServerStatus error: Error DomainFBSOpenApplicationServiceErrorDomain Code1 "T…

【计算机视觉】CV实战项目 - 深入解析基于HOG+SVM的行人检测系统:Pedestrian Detection

深入解析基于HOGSVM的行人检测系统&#xff1a;从理论到实践 技术核心&#xff1a;HOGSVM检测框架HOG特征原理SVM分类器 项目架构与数据准备INRIA Person数据集目录结构 实战指南&#xff1a;从零构建检测系统环境配置完整训练流程检测应用 关键技术问题与解决方案1. 难例挖掘不…

day01_编程语言介绍丶Java语言概述丶开发环境搭建丶常用DOS命令

编程语言介绍 ‌编程语言是一种用于人与计算机之间通信的语言&#xff0c;允许程序员编写代码&#xff0c;这些代码告诉计算机要执行哪些操作‌。编程语言可以被视为计算机可以理解并执行的指令集合&#xff0c;它是一种标准化的交流技巧&#xff0c;用于向计算机发出指令。‌…

告别默认配置!Xray自定义POC开发指南

文章涉及操作均为测试环境,未授权时切勿对真实业务系统进行测试! 下载与解压 官网地址: Xray GitHub Releases 根据系统选择对应版本: Windows:xray_windows_amd64.exe.zipLinux:xray_linux_amd64.zipmacOS:xray_darwin_amd64.zip解压后得到可执行文件(如 xray_linux_…

C语言编程--17.有效的括号

题目&#xff1a; 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序…

代码随想录算法训练营第60期第十七天打卡

今天我们继续进入二叉树的下一个章节&#xff0c;今天的内容我在写今天的博客前大致看了一下部分题目难度不算大&#xff0c;那我们就进入今天的题目。 第一题对应力扣编号为654的题目最大二叉树 这道题目的坑相当多&#xff0c;我第一次题目没有看明白就是我不知道到底是如何…

Burp靶场JWT学习笔记1

JWT(JSON Web Token) 从其名字就可以看出来&#xff0c;它具有表示身份的作用&#xff0c;其本质是将用户信息储存到一串json字符串中再将其编码得到一串token JWT由三部分组成&#xff0c;分别是 Header&#xff0c;Payload&#xff0c;Signatrue JWTBase64(Header).Base6…

第53.5讲 | 小项目实战:用 SHAP 值解释农作物产量预测模型 [特殊字符][特殊字符]

目录 ✅ 项目背景 &#x1f4e6; 所用工具 &#x1f4c1; 数据字段&#xff08;模拟&#xff09; &#x1f9d1;‍&#x1f4bb; 代码实现步骤 &#x1f3af; 解读与启发 &#x1f9e0; 项目拓展建议 ✅ 项目背景 我们使用一个简化的玉米产量数据集&#xff08;可模拟实…

极狐GitLab 合并请求依赖如何解决?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 合并请求依赖 (PREMIUM ALL) 在极狐GitLab 16.6 中引入了对复杂合并依赖关系的支持&#xff0c;通过名为 remove_mr_blockin…

Django DRF实现用户数据权限控制

在 Django DRF 中使用 ModelViewSet 时&#xff0c;若需实现用户仅能查看和操作自己的数据详情&#xff0c;同时允许所有认证用户访问列表&#xff0c;需结合权限类和动态权限分配。以下是具体步骤&#xff1a; 1. 自定义对象权限类 创建一个 IsOwner 权限类&#xff0c;检查…

【数据结构】——线性表之单链表

一、单链表的概念和结构 1、单链表的概念&#xff1a; 链表也是属于我们的线性表中的一种&#xff0c;其物理结构上是不一定连续的&#xff0c;但是逻辑结构上是一定连续的&#xff0c;所以其是没办法像前面的顺序表一样通过找到下一个元素的&#xff0c;其是通过指针来找到下…

线程函数库

pthread_create函数 pthread_create 是 POSIX 线程库&#xff08;pthread&#xff09;中的一个函数&#xff0c;用于创建一个新的线程。 头文件 #include <pthread.h> 函数原型 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*s…

2.5 桥梁桥面系及附属结构施工

2.5.1 桥面系施工 1.排水设施 设置纵横坡及泄水孔&#xff0c;减少桥面积水、防排结合。汇水槽、泄水孔顶面高程低于桥面铺装10-15mm。泄水孔边缘设渗水盲沟泄水管下端至少应伸出构筑物底面100-150mm。泄水管通过竖向管道直接引至地面或雨水管线。竖向管道抱箍、卡环、定位卡…

docker 代理配置冲突问题

问题描述 执行 systemctl show --property=Environment docker 命令看到有如下代理配置 sudo systemctl show --property=Environment docker Environment=HTTP_PROXY=http://127.0.0.1:65001 HTTPS_PROXY=http://127.0.0.1:65001 NO_PROXY=127.0.0.1,docker.io,ghcr.io,uhub…