在《程序設(shè)計(jì)實(shí)踐》(英文名《The Practice of Programming》)的書(shū)中,第三章分別用C語(yǔ)言,C++,AWK和Perl分別實(shí)現(xiàn)了馬耳可夫鏈算法,來(lái)通過(guò)輸入的文本,“隨機(jī)”的生成一些有用的文本。
說(shuō)明:
1. 程序使用了字典,字典和散列可不是一個(gè)東西,字典是鍵值對(duì)的集合,而散列是一種能夠常數(shù)階插入,刪除,不過(guò)可以用散列來(lái)實(shí)現(xiàn)字典。
2. 字典的setdefault()方法使得程序少了許多條件判斷。
3. random.choice()可以隨機(jī)取出一個(gè)序列中的元素。
4. 每?jī)蓚€(gè)前綴詞確定一個(gè)后綴。
實(shí)現(xiàn)代碼:
import random import sys MAXGEN = 10000 NONWORD = ' ' w1 = w2 = NONWORD statetab = {} text = sys.stdin.read() words = text.split() for word in words: statetab.setdefault((w1, w2),[]).append(word) w1, w2 = w2, word # add tail statetab.setdefault((w1, w2),[]).append(NONWORD) # show mar words w1 = w2 = NONWORD for i in xrange(MAXGEN): suf = statetab[(w1,w2)] t = random.choice(suf) if t == NONWORD: break print t w1, w2 = w2, t
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com