close
Content

給你一列文字,請你找出各字元出現的次數。

Input

每筆測試資料一列。每列最大長度為1000。

Output

對每一列輸入,請輸出各字元的ASCII值及其出現的次數。請根據出現的次數由小到大輸出。如果有2個以上的字元有相同的次數,則ASCII值較大的先輸出。 測試資料間請空一列,參考Sample Output

Sample Input #1
AAABBC
122333
Sample Output #1
67 1
66 2
65 3

49 1
50 2
51 3

 

from sys import stdin
from collections import Counter
#對每一列輸入,請輸出各字元的ASCII值及其出現的次數
for s in stdin:
    s=s.strip()#讀取砍掉換行符號
    s=[ord(i) for i in s]#創一個list立面放轉ascii的字符
    c=Counter(s)#轉化成一個字典
    
    #這裡要把dic轉成list,因為要排序
    p=[(key,value)for key,value in c.items()]
    
    p.sort( key=lambda z: (z[1],-z[0])  )

    # z對應每個p元素
    # z[0]要由小到大,題目說根據出現的次數由小到大輸出
    # z[1]由大到小,題目說字元有相同的次數,則ASCII值較大的先輸出
    g=["{} {}".format(key,value)for key,value in p ]
    #用format可以將tuple轉換成字串,再把字串丟進list裡
    # [(103, 1), (121, 2)]

    #第一種輸出方式
    #print(*g,sep='\n') 
    
    #第二種輸出方式
    r="\n".join(g)
    print(r)
arrow
arrow
    文章標籤
    python 高中生程式解題
    全站熱搜
    創作者介紹
    創作者 趴趴熊日常 的頭像
    趴趴熊日常

    資工趴趴熊的小天地

    趴趴熊日常 發表在 痞客邦 留言(0) 人氣()