当前位置: 首页 > news >正文

列表与字典应用

目的:熟练操作组合数据类型。

任务:

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

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

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

1.生日悖论分析

import randomdef calculate_birthday_probability(sample_size):match_count = 0for _ in range(sample_size):birthdays = [random.randint(1, 365) for _ in range(23)]if len(set(birthdays)) < 23:  # 存在重复生日match_count += 1return match_count / sample_size# 测试不同样本数量
sample_sizes = [1000, 10000, 100000]
for size in sample_sizes:prob = calculate_birthday_probability(size)print(f"样本数量={size}, 概率={prob:.4f}")

运行结果:

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

一句顶一万句.txt和chinese_stopwords.txt停用词表文件可自行搜索获取。

import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt# 读取《一句顶一万句》文本内容
with open("一句顶一万句.txt", "r", encoding="utf-8") as f:text = f.read()# 读取停用词表
with open("chinese_stopwords.txt", "r", encoding="utf-8") as f:stopwords = [line.strip() for line in f.readlines()]# 分词
words = jieba.lcut(text)# 过滤停用词
filtered_words = [word for word in words if word not in stopwords and len(word) > 1]# 统计词频
word_freq = {}
for word in filtered_words:word_freq[word] = word_freq.get(word, 0) + 1# 取前10高频词
top_10 = sorted(word_freq.items(), key=lambda x: -x[1])[:10]
print("前10高频词:", top_10)# 生成词云
wordcloud = WordCloud(font_path="simhei.ttf", width=800, height=400).generate_from_frequencies(word_freq)
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

运行结果:

3.金庸、古龙等武侠小说写作风格分析

import jieba
import jieba.posseg as psegdef analyze_novel_style(novel_path, stopwords_path, top_n=10):# 读取小说文本with open(novel_path, 'r', encoding='utf-8') as f:text = f.read()# 读取停用词表with open(stopwords_path, 'r', encoding='utf-8') as f:stopwords = set([line.strip() for line in f.readlines()])# 分词words = jieba.lcut(text)# 过滤停用词、单字filtered_words = [word for word in words if word not in stopwords and len(word) > 1]# 统计词频word_freq = {}for word in filtered_words:word_freq[word] = word_freq.get(word, 0) + 1# 按词频排序并取前 top_n 个高频词top_words = sorted(word_freq.items(), key=lambda x: x[1], reverse=True)[:top_n]return [word for word, _ in top_words]# 定义金庸和古龙小说路径
jin_yong_novels = {"射雕英雄传": "射雕英雄传.txt","神雕侠侣": "神雕侠侣.txt","倚天屠龙记": "倚天屠龙记.txt"
}stopwords_path = "chinese_stopwords.txt"# 分析金庸小说
jin_yong_top_words = {}
for name, path in jin_yong_novels.items():jin_yong_top_words[name] = analyze_novel_style(path, stopwords_path)# 输出结果
print("金庸小说高频词:")
for name, words in jin_yong_top_words.items():print(f"{name}: {words}")# 简单总结风格
jin_yong_common_words = set()
for words in jin_yong_top_words.values():jin_yong_common_words.update(words)print("\n金庸写作风格特点:")
if '江湖' in jin_yong_common_words:print("- 常涉及宏大的江湖背景,展现江湖中的恩怨情仇和门派纷争。")
if '大侠' in jin_yong_common_words:print("- 着重刻画大侠形象,强调侠义精神。")
if '武功' in jin_yong_common_words:print("- 对武功招式和门派武功体系有较多描写。")

运行结果:

http://www.xdnf.cn/news/149635.html

相关文章:

  • 动态规划算法详解(C++)
  • EFL格式|动态库加载 | 重谈地址空间(2)
  • 复合材料高置信度 DIC 测量与高级实验技术研讨会邀请函
  • 达梦数据库压力测试报错超出全局hash join空间,适当增加HJ_BUF_GLOBAL_SIZE解决
  • 【计算机视觉】CV实战项目 - 基于YOLOv5的人脸检测与关键点定位系统深度解析
  • mysql 安装
  • 项目实战-基于大数据分析的暖通系统改造模型【感谢Akila公司以及学院的支持】
  • Lobechat使用WolframAlpha MCP工具减少LLM幻觉
  • Java 设计模式心法之第23篇 - 状态 (State) - 让对象的行为随状态优雅切换
  • 【蓝桥杯选拔赛真题104】Scratch回文数 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析
  • IPOF(Input-Process-Output-Feedback)方法学简介
  • XMOS空间音频——在任何设备上都能提供3D沉浸式空间音频且实现更安全地聆听
  • 【计算机视觉】CV实践项目- 基于PaddleSeg的遥感建筑变化检测全解析:从U-Net 3+原理到工程实践
  • numpy.random.normal与numpy.random.randn的区别与联系
  • 雷电模拟器怎么更改IP地址
  • 使用 Python 项目管理工具 uv 快速创建 MCP 服务(Cherry Studio、Trae 添加 MCP 服务)
  • Jetpack Compose 基础组件学习2.1:Surface
  • stack __ queue(栈和队列)
  • 分布式事务 两阶段提交协议(2PC的原理、挑战)
  • 大模型微调 - 自注意力机制
  • 【统计学习】递归最小二乘算法与奇异值分解
  • #什么是爬虫?——从技术原理到现实应用的全面解析 VI
  • Vue回调函数中的this
  • 【CF】Day43——Codeforces Round 906 (Div. 2) E1
  • Libconfig 修改配置文件里的某个节点
  • Linux 系统用户管理与权限掌控:从基础到精通
  • 《深入理解计算机系统》阅读笔记之第三章 程序的机器级表示
  • Python判断语句-语法:if,if else,if elif else,嵌套,if else语句扁平式写法,案例
  • LatentSync - 字节联合北交大开源的端到端唇形同步框架-附整合包
  • Cannot read properties of null (reading ‘classList‘)