Python程式設計PTA題解 詞頻統計

2021-10-04 05:29:26 字數 1968 閱讀 6460

description:編寫程式,對一段英文文字,統計其中所有不同單詞的個數,以及詞頻最大的前10%的單詞。

所謂「單詞」,是指由不超過80個單詞字元組成的連續字串,但長度超過15的單詞將只擷取保留前15個單詞字元。而合法的「單詞字元」為大小寫字母、數字和下劃線,其它字元均認為是單詞分隔符。

input:輸入一段非空文字,最後以符號#結尾。輸入保證存在至少10個不同的單詞。

output:在第一行中輸出文字中所有不同單詞的個數。注意「單詞」不區分英文大小寫,例如「pat」和「pat」被認為是同乙個單詞。

隨後按照詞頻遞減的順序,按照詞頻:單詞的格式輸出詞頻最大的前10%的單詞。若有並列,則按遞增字典序輸出。

sample input

this is a test.

the word "this" is the word with the highest frequency.

longlonglonglongword should be cut off, so is considered as the same as longlonglonglonee. but this_8 is different than this, and this, and this...#

this line should be ignored.

sample output

注意:雖然單詞the也出現了4次,但因為我們只要輸出前10%(即23個單詞中的前2個)單詞,而按照字母序,the排第3位,所以不輸出。

23

5:this

4:is

import sys

s = sys.stdin.read(

)s = s[

:s.find(

'#')

]#讀寫所有內容,輸入 ctrl+d 結束

for i in s:

#將所有非字母、非數字、非下劃線的字元均用空格替換

if i.isalnum()==

false

and i !=

'_':

s = s.replace(i,

' ')

words1 = s.lower(

).split(

' ')

#以空格分隔各個單詞並儲存它們的小寫

words2 =

for i in words1:

if i =='':

#上一步分隔後,可能存在分隔了兩個空格存留的空字元,將其略過

continue

else

: i = i[:15

]#保留所有單詞的前十五位

#如果字典中有這個鍵,則值加一,若沒有,則建立乙個並令值等於零

words2[i]

= words2.get(i,0)

+1#將字典先按「值」倒序排列,大的在前,最大的數前面加個符號就變的最小,這樣排得越前

#然後再按「鍵」排列,即相同數量時,按字母順序排列

words3 =

sorted

(words2.items(

), key=

lambda x:

(-x[1]

,x[0])

)print

(len

(words3)

)num =

int(

len(words3)/10

)#輸出前10%的單詞

for i in

range

(num)

:print

(str

(words3[i][1

])+':'

+str

(words3[i][0

]))

Python程式設計PTA題解 刪除字元

description 輸入乙個字串 str,再輸入要刪除字元 c,大小寫不區分,將字串 str 現的所有字元 c 刪除。input 在第一行中輸入一行字元 在第二行輸入待刪除的字元 output 輸出僅一行,輸出刪除後的字串 sample input beee sample output resu...

Python程式設計PTA題解 找完數

description 所謂完數就是該數恰好等於除自身外的因子之和。例如 6 1 2 3,其中1 2 3為6的因子。本題要求編寫程式,找出任意兩正整數m和n之間的所有完數。input 輸入僅一行,輸入2個正整數m和n 110000以內的完數如下 1 1 6 1 2 3 28 1 2 4 7 14 4...

PTA 詞頻統計

請編寫程式,對一段英文文字,統計其中所有不同單詞的個數,以及詞頻最大的前10 的單詞。所謂 單詞 是指由不超過80個單詞字元組成的連續字串,但長度超過15的單詞將只擷取保留前15個單詞字元。而合法的 單詞字元 為大小寫字母 數字和下劃線,其它字元均認為是單詞分隔符。輸入給出一段非空文字,最後以符號 ...