實驗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.pswp.cn/pingmian/78186.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78186.shtml
英文地址,請注明出處:http://en.pswp.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…