description:編寫程式,對一段英文文字,統計其中所有不同單詞的個數,以及詞頻最大的前10%的單詞。
所謂「單詞」,是指由不超過80個單詞字元組成的連續字串,但長度超過15的單詞將只擷取保留前15個單詞字元。而合法的「單詞字元」為大小寫字母、數字和下劃線,其它字元均認為是單詞分隔符。
input:輸入一段非空文字,最後以符號#結尾。輸入保證存在至少10個不同的單詞。
output:在第一行中輸出文字中所有不同單詞的個數。注意「單詞」不區分英文大小寫,例如「pat」和「pat」被認為是同乙個單詞。
隨後按照詞頻遞減的順序,按照詞頻:單詞的格式輸出詞頻最大的前10%的單詞。若有並列,則按遞增字典序輸出。
sample input:
sample output: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.
注意:雖然單詞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])
(len
(words3)
)num =
int(
len(words3)/10
)#輸出前10%的單詞
for i in
range
(num)
(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個單詞字元。而合法的 單詞字元 為大小寫字母 數字和下劃線,其它字元均認為是單詞分隔符。輸入給出一段非空文字,最後以符號 ...