iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 4
0
自我挑戰組

程式設計師大冒險系列 第 4

4/150_首次挑戰字串題目(Python)

學習英文大小寫判斷以及新的函式庫花了不少時間。目前差字典(dict)的大小排序,跟輸出格式。
中間的運算解出來,不過學完這一題,之後再解字串應該會快很多。
個人是用Python3


10008 - What's Cryptanalysis?

import re,string
#  讀取測資
def inp():
    #宣告
    global deta #global是全域函數,這樣才能累積前面的資料
    deta={}
    lineco=int(input())
    
    for i in range(lineco):
        sinput=list(input().strip().replace(" ",""))
        count(sinput)
    print(deta)

這邊推薦用Python解題的邦友,參考這位作者的網站

def count(st):
   #宣告
   global deta
   az=tuple(string.ascii_letters)

   for i in range(len(st)):
       ct=st.pop()
       if ct in az:
           ct=ct.upper()
           if ct in deta:
               deta[ct]+=1
           else:
               deta.update({ct:1})
               
inp()

az這邊是用到函式庫string,後面括弧則是大寫A~Z+小寫a~z。如果考試現場忘記,可以用土法煉鋼用手打。雖然看起來很蠢,但是不到最後我是不會放棄的。
計算這行長度做迴圈
取出這行尾字
請問他是大小寫a~z嗎? (因為有標點符號,這邊定義要明確
統一變成大寫英文字母(忘記upper的話可以IF("a")?"A"
請問他在資料庫嗎?
是,該資料+1
不是,資料建檔起始值為1


輸出結果

{'U': 2, 'E': 4, 'T': 6, 'Q': 1, 'Y': 1, 'O': 3, 'N': 2, 'M': 1, 'I': 5, 'A': 2, 'S': 7, 'H': 2, 'W': 2, 'C': 1}


上一篇
3/150_第三天練習刷題(Python)
下一篇
5/150_用字典(dict)減少運算次數
系列文
程式設計師大冒險115

1 則留言

0
DanSnow
iT邦新手 4 級 ‧ 2019-04-23 12:24:08

不好意思剛剛看到你的文章,我比較好奇的是為什麼你要把 ascii_letters 再用 tuple 包起來呢?大致閱讀了你的程式碼,這題應該是要轉大小後算字母數對吧

那我可能會寫:

import collections

counter = collections.Counter()

def count(s):
    s = s.upper()
    for c in s:
        if not c.isalpha():
            continue
        counter[c] += 1

有點久了,好像是因為剛學,只要測資能過就行。collections模組感覺很適合解字串,要是早點看到就好,謝謝你的分享。

我要留言

立即登入留言