Python的字典用法 音符所占百分比 (如何用Python編寫音樂)

這是一個(gè)新的坑,我打算用Python編寫一個(gè)midi生成程序,不知道自己能夠堅(jiān)持多久,看一下有沒有人看吧.目前打算是用"遺傳算法"生成midi.

今天打算講解如何利用字典,來實(shí)現(xiàn)音符出現(xiàn)概率的統(tǒng)計(jì).
也就是一首曲子中,某個(gè)音符出現(xiàn)的百分比.
這部分打算用字典實(shí)現(xiàn).
字典是Python中的一個(gè)數(shù)據(jù)結(jié)構(gòu).
比如, 一個(gè)人的成績,? 語文:90 數(shù)學(xué):70 英語:60
那么就可以用字典來表示.表示方法如下:
dic={"Chinese":90,"Math":70,"English":60}
如上面這樣,一個(gè)成績的字典dic就建立好了.
"Chinese" "Math" "English" 這些叫做字典的"鍵"
90 70 60這些叫做字典的"值"
通過"鍵"可以訪問"值"
比如dic["English"] 它的結(jié)果就是60;
與上面類似,我們需要知道一個(gè)音符在整首曲子中用到了多少次,或所占的百分比.
也可以用字典實(shí)現(xiàn).
一個(gè)音符在Python程序中,就是一個(gè)數(shù)字而已,一首曲子在Python程序中就是一個(gè)數(shù)字序列.
比如 song=[1,2,3,4,? 1,2,3,4,? 1,2,3,4,? 1] 就可以在Python中代表一首曲子啦.當(dāng)然真是情況可能不會(huì)這么簡單.
目前就用這個(gè)序列做個(gè)實(shí)驗(yàn)吧.
我們要統(tǒng)計(jì)一首曲子song序列中各個(gè)音符:1,2,3,4,分別出現(xiàn)了多少次,然后所占百分比也就可以求出來了.
1,2,3,4就是字典的"鍵"? ,至于字典的"值"就是出現(xiàn)的次數(shù),需要我們統(tǒng)計(jì).

我們可以看到,最終
1:4? ?->1這個(gè)音符出現(xiàn)了4次
2:3? ?->2這個(gè)音符出現(xiàn)了3次
3:3? ?->3這個(gè)音符出現(xiàn)了3次
4:3? ?->4這個(gè)音符出現(xiàn)了3次
完全符合我們的預(yù)期,當(dāng)然也可以用其他的方式.(不一定要用字典的...)

這樣輸出來的字典并不是很直觀,于是我想到了用圖片表示它,這里用餅狀圖吧.
溫馨提示一下:如果你想寫一個(gè)大工程,就要有規(guī)劃,上面是數(shù)據(jù)分析,生成字典.可以放到一個(gè).py文件中.畫圖就不屬于數(shù)據(jù)處理了,可以重新建立一個(gè).py文件,用于專門編寫一些生成圖片的函數(shù).(比如餅狀圖,折線圖,曲線圖,柱狀圖...都可以放到繪圖.py文件中,有利于模塊化的管理)
下面我新建立了一個(gè)文件:DY_plot_0.py 名字可以隨便起的.它的作用就是,里面編寫了各種各樣的繪圖函數(shù),然后,某個(gè)時(shí)候要繪圖時(shí),可以調(diào)用這個(gè)文件.
先添加一些頭文件:在DY_plot_0.py文件中.
然后編寫一個(gè)繪制餅狀圖的函數(shù):
然后就可以繪圖了.

然后運(yùn)行一下:
就會(huì)把字典:
1:4? ?->1這個(gè)音符出現(xiàn)了4次
2:3? ?->2這個(gè)音符出現(xiàn)了3次
3:3? ?->3這個(gè)音符出現(xiàn)了3次
4:3? ?->4這個(gè)音符出現(xiàn)了3次
轉(zhuǎn)換成更加直觀的圖片了:

我希望自己能夠堅(jiān)持下去,用Python實(shí)現(xiàn)一個(gè)midi文件,前方路還很遠(yuǎn),只能在假期去做.自己還有很多音樂的知識(shí)不是很懂.希望大家支持 :-)