SlideShare a Scribd company logo
8 集合、字典
尋找詩句交集字 (一)
35
讀入以下六首詩,不考慮標點符號,找出六首詩都有的字。
去年今日此門中,人面桃花相映紅。人面不知何處去,桃花依舊笑春風。
春城無處不飛花,寒食東風御柳斜。日暮漢宮傳蠟蠋,輕煙散入五侯家。
雲想衣裳花想容,春風拂檻露華濃。若非群玉山頭見,會向瑤臺月下逢。
折戟沉沙鐵未銷,自將磨洗認前朝。東風不與周郎便,銅雀春深鎖二喬。
繁華事散逐香塵,流水無情草自春。日暮東風怨啼鳥,落花猶似墮樓人。
娉娉裊裊十三餘,荳蔻梢頭二月初。春風十里揚州路,捲上珠簾總不如。
本題使用集合型別就可輕鬆解決,程式在每讀入一首詩後隨即存入集
合內,由第二首詩開始利用交集函式找尋交集字。此題若不利用集合或字
典型別,而僅使用串列或字串,程式也能撰寫出來,但就需要好好構思。
poems.dat@web
8 集合、字典
尋找詩句交集字 (二)
36
with open("poems.dat”) as infile :
for n , line in enumerate(infile) :
# 去除標點符號
poem = set( filter( lambda c : c not in " 。 , " , line.strip() ) )
if n == 0 :
words = poem.copy()
else :
words.intersection_update(poem)
print( " ".join( words ) )
輸出:
春 風
8 集合、字典
尋找詩句交集字 (三)
37
with open("poems.dat") as infile :
for n , line in enumerate(infile) :
line = line.strip()
if line == "" : continue
ws = sorted( [ c for c in line if c not in "。," ] )
if n == 0 :
# 交集字串列
cwords = []
for w in ws :
if w not in cwords : cwords += [w] # 避免儲存重複字
else :
# 新的交集字串列
new_cwords = []
for w in ws :
if w in cwords : new_cwords += [w] # 找新交集字
# 更新交集字
cwords = new_cwords[:]
# 列印交集字
print( " ".join(cwords) )
以下為完全使用串列的程式版本,觀察程式碼可知在讀進第二首詩後,每次都需使
用迴圈設定新的交集串列,與前相較,就顯得麻煩許多。
8 集合、字典
列印課表 (一)
38
 撰寫程式讀入左側的課程上課時間檔案,印出右邊排好的
課程表:
8 集合、字典
列印課表 (二)
39
wkclass[6][3] = ’微’ wkclass[7][3] = ’微’
wkclass[4][4] = ’微’ wkclass[5][4] = ’微’
本題是以二維串列來儲存右側的課表,課表串列為 8× 5 二維串列,第
一個下標為節數,第二個下標為星期。程式每讀取一列課程資料時,隨即要
由獨取的資料設定到課表串列內,以微積分為例:微積分 四:78 五:56 ,
就需透過程式設定 wkclass 課表串列為以下方式:
中文數字「四」、「五」需分別轉為數字 3 與 4 當成 wkclass 的
第二個下標。節數需減 1 後成為第一個下標。在程式中利用 c2n 字典將
中文數字對應到 cnum 字串的下標數字,如以下:
cnum = ’一二三四五’
# 中文數字對數字字串下標
c2n = { b : a for a , b in enumerate(cnum) }
8 集合、字典
列印課表 (三)
40
num = ’一二三四五’
n = ’四’
# 回傳 n 在 num 字串的下標,n 若不在 num 內回傳 -1
k = num.find(n)
# 回傳 n 在 num 字串的下標,n 若不在 num 內則產生錯誤訊息
k = num.index(n)
本範例是個很簡單的字典應用問題,本程式可不透過字典取得下標,
直接使用字串搜尋 find() 或尋找下標 index() 取得下標,使用如下:
8 集合、字典
列印課表 (四)
41
Day , Section = 5 , 8
cnum = ’一二三四五’
# 中文數字對數字字串下標
c2n = { b : a for a , b in enumerate(cnum) }
# 兩維串列:儲存五天八節的課程名稱
wkclass = [ [None]*Day for i in range(Section) ]
with open(”schedule.dat”) as infile :
for line in infile :
course , *csect = line.split()
# p 為 星期幾:節數,例如:四:567
for p in csect :
a , b = p.split(’:’)
# w 為 wkclass 的第二個下標
w = c2n[a]
for c in b :
# s 為 wkclass 的第一個下標
s = int(c)-1
wkclass[s][w] = course[0]
8 集合、字典
列印課表 (五)
42
# 印出課程表
print( ” | ” + ” ”.join( cnum ) )
print( ”-”*(5+3*5) )
for s in range(Section) :
if s == 4 : print( ”-”*(5+3*5) )
print( ” ”+str(s+1)+” | ” , end=”” )
for w in range(Day) :
print( wkclass[s][w] if wkclass[s][w] else ” ” , end=” ” )
print()
8 集合、字典
各洲國家在教育支出佔 gdp 百分率的前五名 (一)
43
 此題與前一章各國教育支出比範例類似,但資料檔的最後一個欄位
改為國家所在的洲,如美洲、亞洲、歐洲等等。程式要在各洲內找
出國家在教育支出佔 gdp 百分率最高的前五名,用 3× 2 陣列
子圖畫出,每個圖形都以橫條圖表示:
edus.dat@web
8 集合、字典
各洲國家在教育支出佔 gdp 百分率的前五名 (二)
44
本題的作法是將洲名與洲內各國資料統一合成一對資料存入字典,洲名為索
引,洲內各國資料統合成為串列,串列被當成索引的對映值。每個國家儲存國名
,資料年份與 gdp 百分率成為常串列,例如:( "Iran [2012]", 4.7 )
、( "Spain [2012]", 5 )。 五大洲就表示字典僅有五個索引,每個索引對
映到由許多國家所組成的串列,以亞洲為例:
每次由檔案讀入一筆國家資料,經過組合,隨即加到字典索引所對映的串列
末尾。當由洲名索引取出洲內國家序列時,只要利用排序函式由大到小比較
gdp 百分率,再比較國家名稱字母順序,即可取出 gdp 百分率的前五名印成
橫條圖。
本範例可觀察到字典的對映值不必然是一個數字或是字串,也可以是串列,
同時也可看到使用字典的最大優點:將相關聯的資料綁在一起。本題如果不使用
字典類型的資料型別,就要透過兩個串列分開儲存洲名與洲內國家,例如:
Asia : [ ( "Iran [2012]", 4.7 ) , ( "Malaysia [2012]", 5.1 ) ,
( "China [1999]", 1.9 ) , ... , ]
continents = [ "Asia", "Europe", "America", .... ]
nationgdps = [ [ ( "Iran [2012]", 4.7 ), ( "Malaysia [2012]", 5.1 ), ... ] ,
[ ( "Norway [2012], 6.9 ), ( "Sweden [2012]", 7 ), ... ] ,
[ ... ], ... ]
8 集合、字典
各洲國家在教育支出佔 gdp 百分率的前五名 (三)
45
然後透過整數下標分別取得資料,這種儲存方式在取用資料很是麻煩,
例如:以下要找出亞洲所有國家的 gdp 教育支出百分率:
各洲與洲內的國家本是相關的資料組合,使用兩個串列分開儲存造成洲與洲
內的國家需找尋同位置的整數下標來連結,這樣的處置是很笨拙的。相形之下使
用字典是相當直接了當,以上程式若改用字典一列就解決,兩相對比,使用字典
的好處就不言而喻。
本題使用 subplots 將五張圖形印在一起,有關 subplots 的用法也可
參考累積雨量範例,只要參照相關用法即能很快學會如何產生矩陣列排列圖形。
foo = "Asia"
for i in range( len(continents) ) :
if continents[i] == foo : # 找到下標
gdps = nationgdps[i]
break
print( gdps )
print( ctn[”Asia”] ) # ctn 為程式範例的字典
8 集合、字典
各洲國家在教育支出佔 gdp 百分率的前五名 (四)
46
import pylab
# 索引:洲名,對映值:( 國名 + 資料年份 , gdp ) 串列
ctn = {}
with open("edu2.dat") as infile :
for line in infile :
# 分離資料再重新組合 ( 國名+年 , gdp ) 常串列
*nation , gdp , year , continent = line.split()
if gdp == ’n.a.’ : gdp = "-1"
data = ( " ".join(nation) + " [" + year + "]" , float(gdp) )
# 跨兩洲的國家以斜線分割:如俄羅斯
for c in continent.split(’/’) :
if c in ctn :
ctn[c].append( data )
else :
ctn[c] = [ data ]
no = 5
xs = [ x for x in range(0,17,2) ]
ys = [ y for y in range(no,0,-1) ]
8 集合、字典
各洲國家在教育支出佔 gdp 百分率的前五名 (五)
47
colors = ’rgbcmyk’
nrows , ncols = 3 , 2
# 區分 3x2 圖形五圖,共用 x , y 軸
fig , gs = pylab.subplots(nrows,ncols,facecolor=’w’)
# hspace 設定縱向兩圖間的間距(平均縱軸高度的比例)
# wspace 設定橫向兩圖間的間距(平均橫軸寬度的比例)
pylab.subplots_adjust(hspace=0.8,wspace=0.5)
# 依洲名排序
for i , k in enumerate( sorted( ctn.keys() ) ) :
r = i//ncols
c = i%ncols
# 各洲國家排列:先比 gdp 再比國名
ctn[k].sort( key = lambda p : ( -p[1] , p[0] ) )
# 儲存前 no 筆資料 vals:gdp% , nations:國名
vals , nations = [] , []
for j , p in enumerate(ctn[k]) :
vals.append(p[1])
nations.append(p[0])
if j+1 == no : break
8 集合、字典
各洲國家在教育支出佔 gdp 百分率的前五名 (六)
48
# 設定第一名國家顏色與其餘四國顏色不同
gs[r][c].barh( ys[0],vals[0],align=’center’,color=colors[i] )
gs[r][c].barh( ys[1:],vals[1:],align=’center’,color=’#aaffaa’ )
# 設定子圖文字說明
gs[r][c].set_title( "Top " + str(no) +
" nations spend more gdp%n on education in "
+ k , color=colors[i] )
# X 軸文字
gs[r][c].set_xlabel("gdp percentage")
# X 軸刻度
gs[r][c].set_xticks(xs)
# Y 軸刻度
gs[r][c].set_yticks(ys)
# Y 軸刻度文字
gs[r][c].set_yticklabels(nations,color=’k’)
# 顯示垂直格線
gs[r][c].grid(axis=’x’)
# 去除最後一個圖形軸線
gs[2][1].axis(’off’)
pylab.show()
8 集合、字典
中文筆劃數 (一)
49
 萬國碼(unicode)的基本漢字範圍介於 [U+4E00,U+9FA5],
這是以十六進位表示的編號順序,若以十進位表示則是介於
[19968,40869]。今有一個中文筆劃檔,檔案的每一列包含漢
字在萬國碼的編號與其筆劃數,例如:
strokes.dat@web
8 集合、字典
中文筆劃數 (二)
50
以上顯示資料的末三筆所對應的漢字分別為「田」「由」「甲」,都是
5劃。現要利用這個筆劃檔,印出所輸入中文字串的各字筆劃數與全部的筆劃
。例如::
本程式的重點在如何將各列的十六進位數字字串轉成十進位數字,假設
foo = ’U+7531’,那麼可用以下簡單的方法將字串數字轉為數字:
以上的 16 代表 int 函式的第一個參數為 16 進位數字字串。在以下
的程式中使用 sdict 字典儲存每個漢字萬國碼編號的筆劃數,有了這個漢
字筆劃字典後,找出輸入中文字串的各字筆劃與計算全部筆劃就很簡單了。
> 中央大學
中:4 央:5 大:3 學:16 總筆劃數:28
> 山明水秀
山:3 明:8 水:4 秀:7 總筆劃數:22
num = int( foo[2:] , 16 ) # num = 30001
8 集合、字典
中文筆劃數 (三)
51
# 索引:萬國碼編號 對映值:筆劃數
sdict = {}
# 讀入筆劃檔存入 sdict 字典
with open( "strokes.dat" ) as infile :
for line in infile :
ucode , strokes = line.split()
num = int(ucode[2:],16)
sdict[num] = int(strokes)
# 輸入中文句子
while True :
words = input("> ")
totals = 0
for c in name :
strokes = sdict[ord(c)]
print( c , ”:” , strokes , sep=”” , end=” ” )
totals += strokes
print( " 總筆劃數:" , totals , sep="" , end="nn" )
8 集合、字典
萬國碼中文字依筆劃排序 (一)
52
 利用上例的筆劃檔,撰寫程式將萬國碼中的所有中文字依筆劃排序如下:
本題的關鍵在定義一個「筆劃」對應到「字串」的字典,在讀入檔案
時隨即將同筆劃的字逐一加到字串末尾。列印時使用 sorted 對筆劃索
引排序,每 20 個字列印成一列。
8 集合、字典
萬國碼中文字依筆劃排序 (二)
53
# 索引:筆劃 對映值:同筆劃漢字所構成字串
sdict = {}
# 讀筆劃資料檔,將同筆劃的字存在一起
with open( "strokes.dat" ) as infile :
for line in infile :
ucode , strokes = line.split()
char = chr(int(ucode[2:],16))
stroke = int(strokes)
# 若筆劃數第一次出現,以字串儲存
if stroke not in sdict :
sdict[stroke] = char
else :
sdict[stroke] += char
# 依筆劃由小到大排序
for stroke in sorted( sdict.keys() ) :
chars = sdict[stroke]
print( stroke , ”劃 :” , len(chars) , ”個” )
a = 0
while a < len(chars) :
print( " ".join(chars[a:a+20]) )
a += 20
print()

More Related Content

What's hot

Ch3 教學
Ch3 教學Ch3 教學
Ch3 教學
hungchiayang1
 
Ch12 教學
Ch12 教學Ch12 教學
Ch12 教學
hungchiayang1
 
Ch5 教學
Ch5 教學Ch5 教學
Ch5 教學
hungchiayang1
 
Ch12 範例
Ch12 範例Ch12 範例
Ch12 範例
hungchiayang1
 
Ch5 習題
Ch5 習題Ch5 習題
Ch5 習題
hungchiayang1
 
Ch6 教學
Ch6 教學Ch6 教學
Ch6 教學
hungchiayang1
 
Ch4 教學
Ch4 教學Ch4 教學
Ch4 教學
hungchiayang1
 
Ppt 1-50
Ppt 1-50Ppt 1-50
Ppt 1-50
hungchiayang1
 
Ch11 教學
Ch11 教學Ch11 教學
Ch11 教學
hungchiayang1
 
Ch7 習題
Ch7 習題Ch7 習題
Ch7 習題
hungchiayang1
 
Ch1 教學
Ch1 教學Ch1 教學
Ch1 教學
hungchiayang1
 
Ch9 範例
Ch9 範例Ch9 範例
Ch9 範例
hungchiayang1
 
Ch7 教學
Ch7 教學Ch7 教學
Ch7 教學
hungchiayang1
 
Ch9 教學
Ch9 教學Ch9 教學
Ch9 教學
hungchiayang1
 
Ch5 範例
Ch5 範例Ch5 範例
Ch5 範例
hungchiayang1
 
Ch2 教學
Ch2 教學Ch2 教學
Ch2 教學
hungchiayang1
 
Ppt 167-173
Ppt 167-173Ppt 167-173
Ppt 167-173
hungchiayang1
 
Python p.193 197
Python p.193 197Python p.193 197
Python p.193 197
hungchiayang1
 
Ch10 範例
Ch10 範例Ch10 範例
Ch10 範例
hungchiayang1
 
Ppt 51-77
Ppt 51-77Ppt 51-77
Ppt 51-77
hungchiayang1
 

What's hot (20)

Ch3 教學
Ch3 教學Ch3 教學
Ch3 教學
 
Ch12 教學
Ch12 教學Ch12 教學
Ch12 教學
 
Ch5 教學
Ch5 教學Ch5 教學
Ch5 教學
 
Ch12 範例
Ch12 範例Ch12 範例
Ch12 範例
 
Ch5 習題
Ch5 習題Ch5 習題
Ch5 習題
 
Ch6 教學
Ch6 教學Ch6 教學
Ch6 教學
 
Ch4 教學
Ch4 教學Ch4 教學
Ch4 教學
 
Ppt 1-50
Ppt 1-50Ppt 1-50
Ppt 1-50
 
Ch11 教學
Ch11 教學Ch11 教學
Ch11 教學
 
Ch7 習題
Ch7 習題Ch7 習題
Ch7 習題
 
Ch1 教學
Ch1 教學Ch1 教學
Ch1 教學
 
Ch9 範例
Ch9 範例Ch9 範例
Ch9 範例
 
Ch7 教學
Ch7 教學Ch7 教學
Ch7 教學
 
Ch9 教學
Ch9 教學Ch9 教學
Ch9 教學
 
Ch5 範例
Ch5 範例Ch5 範例
Ch5 範例
 
Ch2 教學
Ch2 教學Ch2 教學
Ch2 教學
 
Ppt 167-173
Ppt 167-173Ppt 167-173
Ppt 167-173
 
Python p.193 197
Python p.193 197Python p.193 197
Python p.193 197
 
Ch10 範例
Ch10 範例Ch10 範例
Ch10 範例
 
Ppt 51-77
Ppt 51-77Ppt 51-77
Ppt 51-77
 

Similar to Ch8 範例

Ch6 範例
Ch6 範例Ch6 範例
Ch6 範例
hungchiayang1
 
ncuma_型別與迴圈.pptx
ncuma_型別與迴圈.pptxncuma_型別與迴圈.pptx
ncuma_型別與迴圈.pptx
NCU MCL
 
C語言陣列與字串
C語言陣列與字串C語言陣列與字串
C語言陣列與字串
吳錫修 (ShyiShiou Wu)
 
07 陣列與字串
07 陣列與字串07 陣列與字串
07 陣列與字串shademoon
 
ncuma_pylab.pptx
ncuma_pylab.pptxncuma_pylab.pptx
ncuma_pylab.pptx
NCU MCL
 
第三章
第三章第三章
第三章
贺 利华
 
Python入門:5大概念初心者必備
Python入門:5大概念初心者必備Python入門:5大概念初心者必備
Python入門:5大概念初心者必備
Derek Lee
 

Similar to Ch8 範例 (7)

Ch6 範例
Ch6 範例Ch6 範例
Ch6 範例
 
ncuma_型別與迴圈.pptx
ncuma_型別與迴圈.pptxncuma_型別與迴圈.pptx
ncuma_型別與迴圈.pptx
 
C語言陣列與字串
C語言陣列與字串C語言陣列與字串
C語言陣列與字串
 
07 陣列與字串
07 陣列與字串07 陣列與字串
07 陣列與字串
 
ncuma_pylab.pptx
ncuma_pylab.pptxncuma_pylab.pptx
ncuma_pylab.pptx
 
第三章
第三章第三章
第三章
 
Python入門:5大概念初心者必備
Python入門:5大概念初心者必備Python入門:5大概念初心者必備
Python入門:5大概念初心者必備
 

More from hungchiayang1

Exercise 1 3
Exercise 1 3Exercise 1 3
Exercise 1 3
hungchiayang1
 
P127 135 new
P127 135 newP127 135 new
P127 135 new
hungchiayang1
 
Python differential equation
Python differential equationPython differential equation
Python differential equation
hungchiayang1
 
化學系 python 習題
化學系 python 習題化學系 python 習題
化學系 python 習題
hungchiayang1
 
化學系 python 練習
化學系 python 練習化學系 python 練習
化學系 python 練習
hungchiayang1
 
化學系 python 教學
化學系 python 教學化學系 python 教學
化學系 python 教學
hungchiayang1
 
Ppt 120-126
Ppt 120-126Ppt 120-126
Ppt 120-126
hungchiayang1
 
Ppt 151-151
Ppt 151-151Ppt 151-151
Ppt 151-151
hungchiayang1
 
Ppt 136-136
Ppt 136-136Ppt 136-136
Ppt 136-136
hungchiayang1
 
Ppt 143-143
Ppt 143-143Ppt 143-143
Ppt 143-143
hungchiayang1
 
Ppt 137-137
Ppt 137-137Ppt 137-137
Ppt 137-137
hungchiayang1
 
Ppt 150-150
Ppt 150-150Ppt 150-150
Ppt 150-150
hungchiayang1
 
Ppt 26-50
Ppt 26-50Ppt 26-50
Ppt 26-50
hungchiayang1
 
Ppt 145-149
Ppt 145-149Ppt 145-149
Ppt 145-149
hungchiayang1
 
Ppt 138-142
Ppt 138-142Ppt 138-142
Ppt 138-142
hungchiayang1
 
Ppt 174-174
Ppt 174-174Ppt 174-174
Ppt 174-174
hungchiayang1
 
Ppt 1-25
Ppt 1-25Ppt 1-25
Ppt 1-25
hungchiayang1
 
Ppt 144-144
Ppt 144-144Ppt 144-144
Ppt 144-144
hungchiayang1
 
Ppt 152-155
Ppt 152-155Ppt 152-155
Ppt 152-155
hungchiayang1
 
Ppt 156-156
Ppt 156-156Ppt 156-156
Ppt 156-156
hungchiayang1
 

More from hungchiayang1 (20)

Exercise 1 3
Exercise 1 3Exercise 1 3
Exercise 1 3
 
P127 135 new
P127 135 newP127 135 new
P127 135 new
 
Python differential equation
Python differential equationPython differential equation
Python differential equation
 
化學系 python 習題
化學系 python 習題化學系 python 習題
化學系 python 習題
 
化學系 python 練習
化學系 python 練習化學系 python 練習
化學系 python 練習
 
化學系 python 教學
化學系 python 教學化學系 python 教學
化學系 python 教學
 
Ppt 120-126
Ppt 120-126Ppt 120-126
Ppt 120-126
 
Ppt 151-151
Ppt 151-151Ppt 151-151
Ppt 151-151
 
Ppt 136-136
Ppt 136-136Ppt 136-136
Ppt 136-136
 
Ppt 143-143
Ppt 143-143Ppt 143-143
Ppt 143-143
 
Ppt 137-137
Ppt 137-137Ppt 137-137
Ppt 137-137
 
Ppt 150-150
Ppt 150-150Ppt 150-150
Ppt 150-150
 
Ppt 26-50
Ppt 26-50Ppt 26-50
Ppt 26-50
 
Ppt 145-149
Ppt 145-149Ppt 145-149
Ppt 145-149
 
Ppt 138-142
Ppt 138-142Ppt 138-142
Ppt 138-142
 
Ppt 174-174
Ppt 174-174Ppt 174-174
Ppt 174-174
 
Ppt 1-25
Ppt 1-25Ppt 1-25
Ppt 1-25
 
Ppt 144-144
Ppt 144-144Ppt 144-144
Ppt 144-144
 
Ppt 152-155
Ppt 152-155Ppt 152-155
Ppt 152-155
 
Ppt 156-156
Ppt 156-156Ppt 156-156
Ppt 156-156
 

Recently uploaded

20240520-敏感資料處理原則-柯智仁.pptx.pdf_20240520-敏感資料處理原則-柯智仁.pptx.pdf
20240520-敏感資料處理原則-柯智仁.pptx.pdf_20240520-敏感資料處理原則-柯智仁.pptx.pdf20240520-敏感資料處理原則-柯智仁.pptx.pdf_20240520-敏感資料處理原則-柯智仁.pptx.pdf
20240520-敏感資料處理原則-柯智仁.pptx.pdf_20240520-敏感資料處理原則-柯智仁.pptx.pdf
jhujyunjhang
 
20240522-如何下載與引用TBIA資料-張俊怡.pdf_20240522-如何下載與引用TBIA資料-張俊怡.pdf
20240522-如何下載與引用TBIA資料-張俊怡.pdf_20240522-如何下載與引用TBIA資料-張俊怡.pdf20240522-如何下載與引用TBIA資料-張俊怡.pdf_20240522-如何下載與引用TBIA資料-張俊怡.pdf
20240522-如何下載與引用TBIA資料-張俊怡.pdf_20240522-如何下載與引用TBIA資料-張俊怡.pdf
jhujyunjhang
 
根据课文训练学生习写《可以喝的书》,丙组作文也是一篇供料作文,满分为十分.pptx
根据课文训练学生习写《可以喝的书》,丙组作文也是一篇供料作文,满分为十分.pptx根据课文训练学生习写《可以喝的书》,丙组作文也是一篇供料作文,满分为十分.pptx
根据课文训练学生习写《可以喝的书》,丙组作文也是一篇供料作文,满分为十分.pptx
OOJIANHANGMoe
 
GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】
GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】
GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】
微信 tytyqqww业务接单
 
20230913-資料標準-劉璟儀.pdf_20230913-資料標準-劉璟儀.pdf
20230913-資料標準-劉璟儀.pdf_20230913-資料標準-劉璟儀.pdf20230913-資料標準-劉璟儀.pdf_20230913-資料標準-劉璟儀.pdf
20230913-資料標準-劉璟儀.pdf_20230913-資料標準-劉璟儀.pdf
jhujyunjhang
 
Unit 3 Self-Introduction New words 2.pptx
Unit 3 Self-Introduction New words 2.pptxUnit 3 Self-Introduction New words 2.pptx
Unit 3 Self-Introduction New words 2.pptx
priscilleng1
 
20220325-如何下載與引用資料-柯智仁.pdf_20220325-如何下載與引用資料-柯智仁.pdf
20220325-如何下載與引用資料-柯智仁.pdf_20220325-如何下載與引用資料-柯智仁.pdf20220325-如何下載與引用資料-柯智仁.pdf_20220325-如何下載與引用資料-柯智仁.pdf
20220325-如何下載與引用資料-柯智仁.pdf_20220325-如何下載與引用資料-柯智仁.pdf
jhujyunjhang
 
20230913-開放資料流程-柯智仁.pdf_20230913-開放資料流程-柯智仁.pdf
20230913-開放資料流程-柯智仁.pdf_20230913-開放資料流程-柯智仁.pdf20230913-開放資料流程-柯智仁.pdf_20230913-開放資料流程-柯智仁.pdf
20230913-開放資料流程-柯智仁.pdf_20230913-開放資料流程-柯智仁.pdf
jhujyunjhang
 
流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義
流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義
流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義
LinPhil
 
台科大史懷哲團隊研習課程(專題課程發展分享 以Arduino專案實作出發)20240613
台科大史懷哲團隊研習課程(專題課程發展分享 以Arduino專案實作出發)20240613台科大史懷哲團隊研習課程(專題課程發展分享 以Arduino專案實作出發)20240613
台科大史懷哲團隊研習課程(專題課程發展分享 以Arduino專案實作出發)20240613
趙 亨利
 
113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷
113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷
113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷
ssuserd66db11
 
APII - interview notes 2024 for ogcio latest version
APII - interview notes 2024 for ogcio latest versionAPII - interview notes 2024 for ogcio latest version
APII - interview notes 2024 for ogcio latest version
digimen08
 
澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】
澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】
澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】
微信 tytyqqww业务接单
 
20230513-datapaper-何芷蔚.pdf_20230513-datapaper-何芷蔚.pdf
20230513-datapaper-何芷蔚.pdf_20230513-datapaper-何芷蔚.pdf20230513-datapaper-何芷蔚.pdf_20230513-datapaper-何芷蔚.pdf
20230513-datapaper-何芷蔚.pdf_20230513-datapaper-何芷蔚.pdf
jhujyunjhang
 
20220317-開放授權規範-林誠夏.pdf_20220317-開放授權規範-林誠夏.pdf
20220317-開放授權規範-林誠夏.pdf_20220317-開放授權規範-林誠夏.pdf20220317-開放授權規範-林誠夏.pdf_20220317-開放授權規範-林誠夏.pdf
20220317-開放授權規範-林誠夏.pdf_20220317-開放授權規範-林誠夏.pdf
jhujyunjhang
 
20240521-開放資料的前置準備與清理-楊富鈞.pdf_20240521-開放資料的前置準備與清理-楊富鈞.pdf
20240521-開放資料的前置準備與清理-楊富鈞.pdf_20240521-開放資料的前置準備與清理-楊富鈞.pdf20240521-開放資料的前置準備與清理-楊富鈞.pdf_20240521-開放資料的前置準備與清理-楊富鈞.pdf
20240521-開放資料的前置準備與清理-楊富鈞.pdf_20240521-開放資料的前置準備與清理-楊富鈞.pdf
jhujyunjhang
 
Lesson 3 Self-Introduction New words 1 .pptx
Lesson 3 Self-Introduction New words 1 .pptxLesson 3 Self-Introduction New words 1 .pptx
Lesson 3 Self-Introduction New words 1 .pptx
priscilleng1
 
20240520-TaiBIF和GBIF介紹-劉璟儀.pdf_20240520-TaiBIF和GBIF介紹-劉璟儀.pdf
20240520-TaiBIF和GBIF介紹-劉璟儀.pdf_20240520-TaiBIF和GBIF介紹-劉璟儀.pdf20240520-TaiBIF和GBIF介紹-劉璟儀.pdf_20240520-TaiBIF和GBIF介紹-劉璟儀.pdf
20240520-TaiBIF和GBIF介紹-劉璟儀.pdf_20240520-TaiBIF和GBIF介紹-劉璟儀.pdf
jhujyunjhang
 
Unit 3 Self-Introduction New words 3.pptx
Unit 3 Self-Introduction New words 3.pptxUnit 3 Self-Introduction New words 3.pptx
Unit 3 Self-Introduction New words 3.pptx
priscilleng1
 
20230913 資料發布類型-陳建文.pdf_20230913 資料發布類型-陳建文.pdf
20230913 資料發布類型-陳建文.pdf_20230913 資料發布類型-陳建文.pdf20230913 資料發布類型-陳建文.pdf_20230913 資料發布類型-陳建文.pdf
20230913 資料發布類型-陳建文.pdf_20230913 資料發布類型-陳建文.pdf
jhujyunjhang
 

Recently uploaded (20)

20240520-敏感資料處理原則-柯智仁.pptx.pdf_20240520-敏感資料處理原則-柯智仁.pptx.pdf
20240520-敏感資料處理原則-柯智仁.pptx.pdf_20240520-敏感資料處理原則-柯智仁.pptx.pdf20240520-敏感資料處理原則-柯智仁.pptx.pdf_20240520-敏感資料處理原則-柯智仁.pptx.pdf
20240520-敏感資料處理原則-柯智仁.pptx.pdf_20240520-敏感資料處理原則-柯智仁.pptx.pdf
 
20240522-如何下載與引用TBIA資料-張俊怡.pdf_20240522-如何下載與引用TBIA資料-張俊怡.pdf
20240522-如何下載與引用TBIA資料-張俊怡.pdf_20240522-如何下載與引用TBIA資料-張俊怡.pdf20240522-如何下載與引用TBIA資料-張俊怡.pdf_20240522-如何下載與引用TBIA資料-張俊怡.pdf
20240522-如何下載與引用TBIA資料-張俊怡.pdf_20240522-如何下載與引用TBIA資料-張俊怡.pdf
 
根据课文训练学生习写《可以喝的书》,丙组作文也是一篇供料作文,满分为十分.pptx
根据课文训练学生习写《可以喝的书》,丙组作文也是一篇供料作文,满分为十分.pptx根据课文训练学生习写《可以喝的书》,丙组作文也是一篇供料作文,满分为十分.pptx
根据课文训练学生习写《可以喝的书》,丙组作文也是一篇供料作文,满分为十分.pptx
 
GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】
GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】
GPA低,申硕困难。想问一下是否能修改成绩单?希望得到您的帮助申请美国大学改成绩单可以吗?如何增加申请成功几率【微信:oojjiijj】
 
20230913-資料標準-劉璟儀.pdf_20230913-資料標準-劉璟儀.pdf
20230913-資料標準-劉璟儀.pdf_20230913-資料標準-劉璟儀.pdf20230913-資料標準-劉璟儀.pdf_20230913-資料標準-劉璟儀.pdf
20230913-資料標準-劉璟儀.pdf_20230913-資料標準-劉璟儀.pdf
 
Unit 3 Self-Introduction New words 2.pptx
Unit 3 Self-Introduction New words 2.pptxUnit 3 Self-Introduction New words 2.pptx
Unit 3 Self-Introduction New words 2.pptx
 
20220325-如何下載與引用資料-柯智仁.pdf_20220325-如何下載與引用資料-柯智仁.pdf
20220325-如何下載與引用資料-柯智仁.pdf_20220325-如何下載與引用資料-柯智仁.pdf20220325-如何下載與引用資料-柯智仁.pdf_20220325-如何下載與引用資料-柯智仁.pdf
20220325-如何下載與引用資料-柯智仁.pdf_20220325-如何下載與引用資料-柯智仁.pdf
 
20230913-開放資料流程-柯智仁.pdf_20230913-開放資料流程-柯智仁.pdf
20230913-開放資料流程-柯智仁.pdf_20230913-開放資料流程-柯智仁.pdf20230913-開放資料流程-柯智仁.pdf_20230913-開放資料流程-柯智仁.pdf
20230913-開放資料流程-柯智仁.pdf_20230913-開放資料流程-柯智仁.pdf
 
流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義
流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義
流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義 流體力學講義
 
台科大史懷哲團隊研習課程(專題課程發展分享 以Arduino專案實作出發)20240613
台科大史懷哲團隊研習課程(專題課程發展分享 以Arduino專案實作出發)20240613台科大史懷哲團隊研習課程(專題課程發展分享 以Arduino專案實作出發)20240613
台科大史懷哲團隊研習課程(專題課程發展分享 以Arduino專案實作出發)20240613
 
113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷
113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷
113學年度國中教育會考寫作測驗六級分樣卷、113學年度國中教育會考寫作測驗六級分樣卷
 
APII - interview notes 2024 for ogcio latest version
APII - interview notes 2024 for ogcio latest versionAPII - interview notes 2024 for ogcio latest version
APII - interview notes 2024 for ogcio latest version
 
澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】
澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】
澳大利亚大学成绩单修改 GPA修改 G5研究生保录英国大学成绩修单改 GPA修改 G5研究生保录实时手机定位app有哪些?【微信:oojjiijj】
 
20230513-datapaper-何芷蔚.pdf_20230513-datapaper-何芷蔚.pdf
20230513-datapaper-何芷蔚.pdf_20230513-datapaper-何芷蔚.pdf20230513-datapaper-何芷蔚.pdf_20230513-datapaper-何芷蔚.pdf
20230513-datapaper-何芷蔚.pdf_20230513-datapaper-何芷蔚.pdf
 
20220317-開放授權規範-林誠夏.pdf_20220317-開放授權規範-林誠夏.pdf
20220317-開放授權規範-林誠夏.pdf_20220317-開放授權規範-林誠夏.pdf20220317-開放授權規範-林誠夏.pdf_20220317-開放授權規範-林誠夏.pdf
20220317-開放授權規範-林誠夏.pdf_20220317-開放授權規範-林誠夏.pdf
 
20240521-開放資料的前置準備與清理-楊富鈞.pdf_20240521-開放資料的前置準備與清理-楊富鈞.pdf
20240521-開放資料的前置準備與清理-楊富鈞.pdf_20240521-開放資料的前置準備與清理-楊富鈞.pdf20240521-開放資料的前置準備與清理-楊富鈞.pdf_20240521-開放資料的前置準備與清理-楊富鈞.pdf
20240521-開放資料的前置準備與清理-楊富鈞.pdf_20240521-開放資料的前置準備與清理-楊富鈞.pdf
 
Lesson 3 Self-Introduction New words 1 .pptx
Lesson 3 Self-Introduction New words 1 .pptxLesson 3 Self-Introduction New words 1 .pptx
Lesson 3 Self-Introduction New words 1 .pptx
 
20240520-TaiBIF和GBIF介紹-劉璟儀.pdf_20240520-TaiBIF和GBIF介紹-劉璟儀.pdf
20240520-TaiBIF和GBIF介紹-劉璟儀.pdf_20240520-TaiBIF和GBIF介紹-劉璟儀.pdf20240520-TaiBIF和GBIF介紹-劉璟儀.pdf_20240520-TaiBIF和GBIF介紹-劉璟儀.pdf
20240520-TaiBIF和GBIF介紹-劉璟儀.pdf_20240520-TaiBIF和GBIF介紹-劉璟儀.pdf
 
Unit 3 Self-Introduction New words 3.pptx
Unit 3 Self-Introduction New words 3.pptxUnit 3 Self-Introduction New words 3.pptx
Unit 3 Self-Introduction New words 3.pptx
 
20230913 資料發布類型-陳建文.pdf_20230913 資料發布類型-陳建文.pdf
20230913 資料發布類型-陳建文.pdf_20230913 資料發布類型-陳建文.pdf20230913 資料發布類型-陳建文.pdf_20230913 資料發布類型-陳建文.pdf
20230913 資料發布類型-陳建文.pdf_20230913 資料發布類型-陳建文.pdf
 

Ch8 範例

  • 1. 8 集合、字典 尋找詩句交集字 (一) 35 讀入以下六首詩,不考慮標點符號,找出六首詩都有的字。 去年今日此門中,人面桃花相映紅。人面不知何處去,桃花依舊笑春風。 春城無處不飛花,寒食東風御柳斜。日暮漢宮傳蠟蠋,輕煙散入五侯家。 雲想衣裳花想容,春風拂檻露華濃。若非群玉山頭見,會向瑤臺月下逢。 折戟沉沙鐵未銷,自將磨洗認前朝。東風不與周郎便,銅雀春深鎖二喬。 繁華事散逐香塵,流水無情草自春。日暮東風怨啼鳥,落花猶似墮樓人。 娉娉裊裊十三餘,荳蔻梢頭二月初。春風十里揚州路,捲上珠簾總不如。 本題使用集合型別就可輕鬆解決,程式在每讀入一首詩後隨即存入集 合內,由第二首詩開始利用交集函式找尋交集字。此題若不利用集合或字 典型別,而僅使用串列或字串,程式也能撰寫出來,但就需要好好構思。 poems.dat@web
  • 2. 8 集合、字典 尋找詩句交集字 (二) 36 with open("poems.dat”) as infile : for n , line in enumerate(infile) : # 去除標點符號 poem = set( filter( lambda c : c not in " 。 , " , line.strip() ) ) if n == 0 : words = poem.copy() else : words.intersection_update(poem) print( " ".join( words ) ) 輸出: 春 風
  • 3. 8 集合、字典 尋找詩句交集字 (三) 37 with open("poems.dat") as infile : for n , line in enumerate(infile) : line = line.strip() if line == "" : continue ws = sorted( [ c for c in line if c not in "。," ] ) if n == 0 : # 交集字串列 cwords = [] for w in ws : if w not in cwords : cwords += [w] # 避免儲存重複字 else : # 新的交集字串列 new_cwords = [] for w in ws : if w in cwords : new_cwords += [w] # 找新交集字 # 更新交集字 cwords = new_cwords[:] # 列印交集字 print( " ".join(cwords) ) 以下為完全使用串列的程式版本,觀察程式碼可知在讀進第二首詩後,每次都需使 用迴圈設定新的交集串列,與前相較,就顯得麻煩許多。
  • 4. 8 集合、字典 列印課表 (一) 38  撰寫程式讀入左側的課程上課時間檔案,印出右邊排好的 課程表:
  • 5. 8 集合、字典 列印課表 (二) 39 wkclass[6][3] = ’微’ wkclass[7][3] = ’微’ wkclass[4][4] = ’微’ wkclass[5][4] = ’微’ 本題是以二維串列來儲存右側的課表,課表串列為 8× 5 二維串列,第 一個下標為節數,第二個下標為星期。程式每讀取一列課程資料時,隨即要 由獨取的資料設定到課表串列內,以微積分為例:微積分 四:78 五:56 , 就需透過程式設定 wkclass 課表串列為以下方式: 中文數字「四」、「五」需分別轉為數字 3 與 4 當成 wkclass 的 第二個下標。節數需減 1 後成為第一個下標。在程式中利用 c2n 字典將 中文數字對應到 cnum 字串的下標數字,如以下: cnum = ’一二三四五’ # 中文數字對數字字串下標 c2n = { b : a for a , b in enumerate(cnum) }
  • 6. 8 集合、字典 列印課表 (三) 40 num = ’一二三四五’ n = ’四’ # 回傳 n 在 num 字串的下標,n 若不在 num 內回傳 -1 k = num.find(n) # 回傳 n 在 num 字串的下標,n 若不在 num 內則產生錯誤訊息 k = num.index(n) 本範例是個很簡單的字典應用問題,本程式可不透過字典取得下標, 直接使用字串搜尋 find() 或尋找下標 index() 取得下標,使用如下:
  • 7. 8 集合、字典 列印課表 (四) 41 Day , Section = 5 , 8 cnum = ’一二三四五’ # 中文數字對數字字串下標 c2n = { b : a for a , b in enumerate(cnum) } # 兩維串列:儲存五天八節的課程名稱 wkclass = [ [None]*Day for i in range(Section) ] with open(”schedule.dat”) as infile : for line in infile : course , *csect = line.split() # p 為 星期幾:節數,例如:四:567 for p in csect : a , b = p.split(’:’) # w 為 wkclass 的第二個下標 w = c2n[a] for c in b : # s 為 wkclass 的第一個下標 s = int(c)-1 wkclass[s][w] = course[0]
  • 8. 8 集合、字典 列印課表 (五) 42 # 印出課程表 print( ” | ” + ” ”.join( cnum ) ) print( ”-”*(5+3*5) ) for s in range(Section) : if s == 4 : print( ”-”*(5+3*5) ) print( ” ”+str(s+1)+” | ” , end=”” ) for w in range(Day) : print( wkclass[s][w] if wkclass[s][w] else ” ” , end=” ” ) print()
  • 9. 8 集合、字典 各洲國家在教育支出佔 gdp 百分率的前五名 (一) 43  此題與前一章各國教育支出比範例類似,但資料檔的最後一個欄位 改為國家所在的洲,如美洲、亞洲、歐洲等等。程式要在各洲內找 出國家在教育支出佔 gdp 百分率最高的前五名,用 3× 2 陣列 子圖畫出,每個圖形都以橫條圖表示: edus.dat@web
  • 10. 8 集合、字典 各洲國家在教育支出佔 gdp 百分率的前五名 (二) 44 本題的作法是將洲名與洲內各國資料統一合成一對資料存入字典,洲名為索 引,洲內各國資料統合成為串列,串列被當成索引的對映值。每個國家儲存國名 ,資料年份與 gdp 百分率成為常串列,例如:( "Iran [2012]", 4.7 ) 、( "Spain [2012]", 5 )。 五大洲就表示字典僅有五個索引,每個索引對 映到由許多國家所組成的串列,以亞洲為例: 每次由檔案讀入一筆國家資料,經過組合,隨即加到字典索引所對映的串列 末尾。當由洲名索引取出洲內國家序列時,只要利用排序函式由大到小比較 gdp 百分率,再比較國家名稱字母順序,即可取出 gdp 百分率的前五名印成 橫條圖。 本範例可觀察到字典的對映值不必然是一個數字或是字串,也可以是串列, 同時也可看到使用字典的最大優點:將相關聯的資料綁在一起。本題如果不使用 字典類型的資料型別,就要透過兩個串列分開儲存洲名與洲內國家,例如: Asia : [ ( "Iran [2012]", 4.7 ) , ( "Malaysia [2012]", 5.1 ) , ( "China [1999]", 1.9 ) , ... , ] continents = [ "Asia", "Europe", "America", .... ] nationgdps = [ [ ( "Iran [2012]", 4.7 ), ( "Malaysia [2012]", 5.1 ), ... ] , [ ( "Norway [2012], 6.9 ), ( "Sweden [2012]", 7 ), ... ] , [ ... ], ... ]
  • 11. 8 集合、字典 各洲國家在教育支出佔 gdp 百分率的前五名 (三) 45 然後透過整數下標分別取得資料,這種儲存方式在取用資料很是麻煩, 例如:以下要找出亞洲所有國家的 gdp 教育支出百分率: 各洲與洲內的國家本是相關的資料組合,使用兩個串列分開儲存造成洲與洲 內的國家需找尋同位置的整數下標來連結,這樣的處置是很笨拙的。相形之下使 用字典是相當直接了當,以上程式若改用字典一列就解決,兩相對比,使用字典 的好處就不言而喻。 本題使用 subplots 將五張圖形印在一起,有關 subplots 的用法也可 參考累積雨量範例,只要參照相關用法即能很快學會如何產生矩陣列排列圖形。 foo = "Asia" for i in range( len(continents) ) : if continents[i] == foo : # 找到下標 gdps = nationgdps[i] break print( gdps ) print( ctn[”Asia”] ) # ctn 為程式範例的字典
  • 12. 8 集合、字典 各洲國家在教育支出佔 gdp 百分率的前五名 (四) 46 import pylab # 索引:洲名,對映值:( 國名 + 資料年份 , gdp ) 串列 ctn = {} with open("edu2.dat") as infile : for line in infile : # 分離資料再重新組合 ( 國名+年 , gdp ) 常串列 *nation , gdp , year , continent = line.split() if gdp == ’n.a.’ : gdp = "-1" data = ( " ".join(nation) + " [" + year + "]" , float(gdp) ) # 跨兩洲的國家以斜線分割:如俄羅斯 for c in continent.split(’/’) : if c in ctn : ctn[c].append( data ) else : ctn[c] = [ data ] no = 5 xs = [ x for x in range(0,17,2) ] ys = [ y for y in range(no,0,-1) ]
  • 13. 8 集合、字典 各洲國家在教育支出佔 gdp 百分率的前五名 (五) 47 colors = ’rgbcmyk’ nrows , ncols = 3 , 2 # 區分 3x2 圖形五圖,共用 x , y 軸 fig , gs = pylab.subplots(nrows,ncols,facecolor=’w’) # hspace 設定縱向兩圖間的間距(平均縱軸高度的比例) # wspace 設定橫向兩圖間的間距(平均橫軸寬度的比例) pylab.subplots_adjust(hspace=0.8,wspace=0.5) # 依洲名排序 for i , k in enumerate( sorted( ctn.keys() ) ) : r = i//ncols c = i%ncols # 各洲國家排列:先比 gdp 再比國名 ctn[k].sort( key = lambda p : ( -p[1] , p[0] ) ) # 儲存前 no 筆資料 vals:gdp% , nations:國名 vals , nations = [] , [] for j , p in enumerate(ctn[k]) : vals.append(p[1]) nations.append(p[0]) if j+1 == no : break
  • 14. 8 集合、字典 各洲國家在教育支出佔 gdp 百分率的前五名 (六) 48 # 設定第一名國家顏色與其餘四國顏色不同 gs[r][c].barh( ys[0],vals[0],align=’center’,color=colors[i] ) gs[r][c].barh( ys[1:],vals[1:],align=’center’,color=’#aaffaa’ ) # 設定子圖文字說明 gs[r][c].set_title( "Top " + str(no) + " nations spend more gdp%n on education in " + k , color=colors[i] ) # X 軸文字 gs[r][c].set_xlabel("gdp percentage") # X 軸刻度 gs[r][c].set_xticks(xs) # Y 軸刻度 gs[r][c].set_yticks(ys) # Y 軸刻度文字 gs[r][c].set_yticklabels(nations,color=’k’) # 顯示垂直格線 gs[r][c].grid(axis=’x’) # 去除最後一個圖形軸線 gs[2][1].axis(’off’) pylab.show()
  • 15. 8 集合、字典 中文筆劃數 (一) 49  萬國碼(unicode)的基本漢字範圍介於 [U+4E00,U+9FA5], 這是以十六進位表示的編號順序,若以十進位表示則是介於 [19968,40869]。今有一個中文筆劃檔,檔案的每一列包含漢 字在萬國碼的編號與其筆劃數,例如: strokes.dat@web
  • 16. 8 集合、字典 中文筆劃數 (二) 50 以上顯示資料的末三筆所對應的漢字分別為「田」「由」「甲」,都是 5劃。現要利用這個筆劃檔,印出所輸入中文字串的各字筆劃數與全部的筆劃 。例如:: 本程式的重點在如何將各列的十六進位數字字串轉成十進位數字,假設 foo = ’U+7531’,那麼可用以下簡單的方法將字串數字轉為數字: 以上的 16 代表 int 函式的第一個參數為 16 進位數字字串。在以下 的程式中使用 sdict 字典儲存每個漢字萬國碼編號的筆劃數,有了這個漢 字筆劃字典後,找出輸入中文字串的各字筆劃與計算全部筆劃就很簡單了。 > 中央大學 中:4 央:5 大:3 學:16 總筆劃數:28 > 山明水秀 山:3 明:8 水:4 秀:7 總筆劃數:22 num = int( foo[2:] , 16 ) # num = 30001
  • 17. 8 集合、字典 中文筆劃數 (三) 51 # 索引:萬國碼編號 對映值:筆劃數 sdict = {} # 讀入筆劃檔存入 sdict 字典 with open( "strokes.dat" ) as infile : for line in infile : ucode , strokes = line.split() num = int(ucode[2:],16) sdict[num] = int(strokes) # 輸入中文句子 while True : words = input("> ") totals = 0 for c in name : strokes = sdict[ord(c)] print( c , ”:” , strokes , sep=”” , end=” ” ) totals += strokes print( " 總筆劃數:" , totals , sep="" , end="nn" )
  • 18. 8 集合、字典 萬國碼中文字依筆劃排序 (一) 52  利用上例的筆劃檔,撰寫程式將萬國碼中的所有中文字依筆劃排序如下: 本題的關鍵在定義一個「筆劃」對應到「字串」的字典,在讀入檔案 時隨即將同筆劃的字逐一加到字串末尾。列印時使用 sorted 對筆劃索 引排序,每 20 個字列印成一列。
  • 19. 8 集合、字典 萬國碼中文字依筆劃排序 (二) 53 # 索引:筆劃 對映值:同筆劃漢字所構成字串 sdict = {} # 讀筆劃資料檔,將同筆劃的字存在一起 with open( "strokes.dat" ) as infile : for line in infile : ucode , strokes = line.split() char = chr(int(ucode[2:],16)) stroke = int(strokes) # 若筆劃數第一次出現,以字串儲存 if stroke not in sdict : sdict[stroke] = char else : sdict[stroke] += char # 依筆劃由小到大排序 for stroke in sorted( sdict.keys() ) : chars = sdict[stroke] print( stroke , ”劃 :” , len(chars) , ”個” ) a = 0 while a < len(chars) : print( " ".join(chars[a:a+20]) ) a += 20 print()