python 2020微光 筆試01 分辨復讀機

2021-10-10 06:24:33 字數 1820 閱讀 3120

知識點與收穫

成電微光工作室2020筆試第一題,下一屆想進入微光工作室的成電小夥伴可以來康康。

題目給出這樣一段txt檔案:

a:小夥子最近怎麼樣

b:最近在參加微光工作室的招新

a:感覺怎樣

b:感覺好多題有點難

a:那咋辦嘛

b:那咋辦嘛

a:那咋辦嘛

b:那咋辦嘛

a:那咋辦嘛

b:那我能咋辦嘛

a:好好學習,加油進微光啊

c:你們兩個上課講什麼話

b:那我去努力學習了,不談了,886*

要求製作乙個程式,使對話輸入後將每個人說的話分組,分別將每個人說的話存入到乙個txt檔案中,並且將每個人不重複的對話分別存入到乙個pkl檔案中,並以對應人名命名檔案

step1 讀入檔案

使用with open 與readlines配合的方法,將對話文字逐行讀出

step2 分辨人名的方法

首先可以考慮將每一句話當成乙個字串,運用切片得到的第乙個字元即是人名,事實上這樣可行。但是,這僅限於本題中名字為乙個英文本母的情況,那麼怎樣得到乙個普適的分辨方法呢?

使用spilt方法可以很好的解決問題,以冒號為分界可以一目了然地分離出人名與對話內容

step3 完成程式主幹要求

# 引入pkl模組。

with open("dialog.txt", mode="r", encoding='utf-8') as fi:

lines = fi.readlines()

# 將dialog中的內容全部逐行讀出。

dialog = {}

for line in lines:

s = line.split(':', 1)

# 以冒號為分界區別開人名與對話內容。

if s[0] not in dialog:

dialog[s[0]] = [s[0]+"-01.txt", s[0]+"-02.pkl", {}]

# 將每個人名與乙個列表對應儲存入字典,且使用if not in結構來確保人名不重複。

with open(dialog[s[0]][0], mode="a+") as fo:

fo.writelines(s[1])

# 以追加形式將對話內容逐行補充導各自的檔案尾部,完成題目的第二項要求。

if s[1] not in dialog[s[0]][2]:

dialog[s[0]][2][s[1]] = ""

# 將不重複的對話以鍵的形式存入字典,賦值為空(隨便賦值什麼應該都無所謂)。

with open(dialog[s[0]][1], mode="wb+") as fo:

pickle.dump(s[1], fo)

# 以追加形式將不重複對話逐行寫入pkl檔案,完成題目第三項要求。

pkl不便展示就不放圖了

1.開關讀寫檔案的方法,讀寫檔案的不同模式;

2.分辨復讀機的思想核心;

3.寫入中文出現亂碼時的基本解決方法。

python 2020演算法筆試題目 逛街

小q在週末的時候和他的小夥伴來到大城市逛街,一條步行街上有很多高樓,共有n座高樓排成一行。小q從第一棟一直走到了最後一棟,小q從來都沒有見到這麼多的樓,所以他想知道他在每棟樓的位置處能看到多少棟樓呢?當前面的樓的高度大於等於後面的樓時,後面的樓將被擋住 輸入描述 輸入第一行將包含乙個數字n,代表樓的...

python 2020演算法筆試題目 視野爭奪

小q在進行一場競技遊戲,這場遊戲的勝負關鍵就在於能否能爭奪一條長度為l的河道,即可以看作是 0,l 的一條數軸。這款競技遊戲當中有n個可以提供視野的道具 真視守衛,第i個真視守衛能夠覆蓋區間 xi,yi 現在小q想知道至少用幾個真視守衛就可以覆蓋整段河道。輸入描述 輸入包括n 1行。第一行包括兩個正...

10天帶你玩轉Python2020版

10天掌握python基礎語法,具備基礎的程式設計能力,建立程式設計思維以及物件導向程式設計思想。從python開發環境的搭建到pycharm使用!本課程將通過10天時間給大家講解linux作業系統相關的知識點,由淺入深帶領大家了解linux系統,最終通過對該系統日積月累的使用達到玩轉linux的目...