2008年12月15日 星期一

用周蟒建立銀行帳戶類別

我們以建立一個銀行帳戶模型為例,來學習寫作周蟒的類別與函式:

類別 帳戶(物件):
定義 __初始化__(金額):
餘額 = 金額

定義 領錢(金額):
餘額 = 餘額 - 金額

定義 存錢(金額):
領錢(-金額)

定義 轉帳(來源帳戶, 目的帳戶, 金額):
來源帳戶.領錢(金額)
目的帳戶.存錢(金額)

主程式:
撲滿 = 帳戶(2000)
錢包 = 帳戶(0)
轉帳(撲滿, 錢包, 50)
印出 撲滿.餘額
印出 錢包.餘額

程式本身就自我解釋地很好了。

輸出結果為:

1950
50

(例子取自 美麗程式)

2008年11月12日 星期三

周蟒上做測試

ZoomQuiet 在 python-cn group 上分享了一篇 TDD实践之实用主义,建議周蟒在教學之外,也和 unittest 作結合。

事實上早已經有在周蟒專案中使用到 unittest 的例子

簡短的範例如:


定義 範例(資料):
返回 資料

# doctest
定義 測試_資料():
申明 範例("巧虎") == "巧虎"


要測試時,先將程式碼轉成 python
$ zhpy -p


再輸入

$ nosetests
.
-------
OK


即完成自動測試。

2008年9月11日 星期四

周蟒 1.7.1 發佈

周蟒 1.7.1 (代號 太陽) 已發佈。可前往網站下載, 或使用
easy_install -U zhpy
命令來更新。

這是一個維護性質的更新。

上一個版本(1.7) 在 官方網站pypi 下載次數總合,
首度超過 500 份。

2008年8月22日 星期五

學習編程的寓言

新手在程式莊園外徘徊。

門房跟新手說:
「你要先買一本導覽手冊,我才準許你進來」。

新手遞出了金幣,門房交給新手一本程式語言導覽手冊。


新手在程式殿堂外徘徊。

門口的警衛跟新手說:
「你要能使用英語與其他人溝通,我才准許你進來」。

新手學懂了英語,門口的警衛打開了門。

程式的殿堂裡面,果然不出所料,

已經擠滿了外國人。

2008年8月12日 星期二

周蟒近期動態 (5~8月)

數學表示法與周蟒

Mr. Monkey 寫了篇 zhpy 的另類用法

利用周蟒 可以用 ini 擴充詞庫的特性,加入數學符號對應,使得程式中可以直接寫出諸如
print sin(π/4) ≠ √(2)/2

這樣的語法,將收錄在下一版的周蟒範例中 (example/realmath)。

文字 RPG 與周蟒

文字 RPG 是使用 console 遊玩,沒有圖片,遊戲裡面的互動與戰鬥都是以文字來表示的一種古早遊戲方式。基於一個德國人寫的 textrpg 模組, 我也寫了篇
給我五分鐘,教你用中文腳本寫一個 RPG (使用 TextRPG)

Crunchy 與周蟒


Crunchy 是一個網頁介面的系統,可以在教學文章中的 python 語言區塊後端直接附上一個互動式 shell,讓讀者可以直接在同個頁面試驗。目前支援 python 2.4 以上環境。

因為 Crunchy 也是基於 utf-8 編碼,因此要讓 Crunchy 支援周蟒相當容易, 只要在原始碼中加上兩行敘述:

crunchy/src/interpreter.py

class InteractiveInterpreter(object):
....
def runsource(self, source, filename="User's code", symbol="single"):
....
try:
from zhpy import convertor
source = convertor(source)
code = self.compile(source, filename, symbol)

如此即可在 crunchy 的網頁介面中輸入周蟒程式碼。

2008年5月21日 星期三

周蟒 1.7 發佈,interpreter 自動完成, 紫蟒

周蟒 1.7 (代號 戀人) 已發佈, 可前往網站下載, 或使用
easy_install -U zhpy
命令來更新.

主要更新有
另外也歡迎 Bob Chao 加入周蟒專案, 近期他將帶給我們重新編排過的可下載 ODF/PDF 版 "咬一口 Python 程式語言" 文件.

這幾天我也開了一個使用周蟒撰寫的術數專案 (主要是 紫微斗數, 中文專案名就取叫 "紫蟒" 好了 XD)
使用中文編程 (python) 來描述術數間的關係, 還可隨時利用測試工具 (nose) 來驗證, 實在是最合適不過.

2008年5月13日 星期二

紫微蟒數

我對術數的研究還不深,之前讀易經註釋時,才發現原來易經的每個卦象爻都能互相解釋;五行生剋關係也是如此反覆循環不息,奧妙處相當迷人。

我的假設是能否將術數(斗數)物件導向化,嘗試用程式語言來檢驗,演示各種'代號'互相之間的關係(例如五行生剋關係)。

因此在發展出周蟒(Python)中文程式語言時,也試著動手將術數物件導向化。

首先的成果是紫微斗數排盤
http://code.google.com/p/zwds/wiki/ZiWei

目前嘗試用周蟒(Python)程式語言寫紫微排盤程式。
程式的目的不是最快速的排盤,而是演示互相間的關係與推導。
沒有找到好的推導方式時,還是採用能找到的查表或計算法。

排盤程式還沒完成, 但整個模型已具其形, (已能排到年干四化).
先拋出一些原始碼片段與文件供討論, 完整原始碼與使用方法在此.

會用到 pyzh 中文工具包中的 lunarcalendar (農曆), 提供輸入西元生日, 自動轉農曆生日來排盤.

對周蟒/術數有興趣者, 可以以此為基礎, 以中文描述將各種中華文化傳統命卜精粹加以程式化. 以做為推導研究之用.


最後也請大家一起為大地震受災的人們祈禱, 南無阿彌陀佛.

2008年5月8日 星期四

關於中文本地化工具包

googlecode 上有一個名稱跟周蟒(zhpy)很像的專案,叫做 pyzh。這個專案的目的是提供一些中文本地化工具。

前幾天剛好寫周蟒有段需要將程式轉成簡體,但 mac 上沒有好的繁簡轉換工具 (fx3 不能用同文堂插件),於是花幾分鐘將 pyzh 專案的簡繁轉換工具弄成命令列可用了(很初步)。

http://code.google.com/p/pyzh/


相信大家對中文工具的需求是不少的,感覺中文本地化工具包這專案相當有用處,
只是還處於很早期階段,需要進一步加強。

想知道大家各自以使用者或開發者的角度, 對於我們 pythoner 需要怎樣的中文工具包這件事上,是怎麼看待的?

在此提出一些我對中文本地化工具包的想法:

1. 工具要支援命令列 :
繁簡轉換工具、算字數工具、文本折行、農曆轉換工具都可以加以命令列化,變成一般通用的工具。
可能有些小工具也可以從 ulipad 中抽取獨立出來。

2. 最好能提供 easy_install 安裝
easy_install 安裝的好處就不必多說了

3. 共用 namespace
讓這些相關 lib 共用一個 namespace, (建議是 zhutils, 類同於 docutils),
然後用英文分類、命名調用。

一方面也算擴大用戶群(老外也有機會來用),另一方面拼音的有侷限,例如 fanjian (--> 犯賤 ?) 對不習慣拼音的我來說看來相當不
雅。

建議的簡單 namespace 分類法:

zhutils - word # 文字相關
- count # 算字數, 對應 wordcount
- translate [pinyin | tw | cn] # 翻譯成 拼音, 繁中 ,簡中,
對應 word2pinyin, fanjian
- cn_word # 簡中分詞
- time # 轉干支計數, 用於算命?
- datetime # 日期相關
- .... 其他

中文本地化工具包,大家怎麼看?

update 2008/5/15:
把整個 pyzh 大架構按照之前提出的思路修了一下, 整成了一個 zhutils 模塊, 以後可以用 pypi 來發佈. 現在所有 pyzh 模塊都在 zhutils 中, 所有副模塊分別歸類在 word(處理文字) 與 datetime(處理日期) 中.

2008年5月6日 星期二

周蟒 1.7 開發進度,interpreter 自動完成

昨天用 rlcompleter 讓周蟒 interpreter 支援自動完成(打單字自動補全關鍵詞,打英出中),
例如任意打出 '印'、'print'、'pri'、'prin' 後,按下 tab 鍵, shell 中就自動換成 '印出' 一詞。

以一段簡單的用迴圈印出資訊的程式碼為例:
>>> for i in range(10):
... print i
要達到等同於這段 python 程式碼的目的,在 zhpy interpreter 中,原本得輸入:
>>> 取 i 自 範圍(10):
... 印出 i
現在可以輸入
>>> for[tab] i in[tab] ran[tab](10):
... pri[tab] i
每次按下 tab 鍵,interpreter 就會自動將 "for"、"in"、"range"、"print" 等關鍵字轉換成 "取"、"自"、"範圍"、"印出"等周蟒關鍵詞,大幅簡化輸入的次數。

期待簡中開發者加入,協助增加利用拼音方式的自動完成。

2008年4月11日 星期五

周蟒線上版,上線!

不要再說學習程式語言要先裝一些軟體很麻煩,
或是說在看 咬一口 Python程式語言 電子書時手邊沒環境驗證。
因為現在,
周蟒也有線上版囉!

ZHPY.appspot 周蟒互動 Shell

ZHPY.appspot 使用的是 Google App Engine 服務,目前提供互動 Shell 功能,
以後會視情況增加其他功能,例如線上 Python <-> 周蟒程式碼轉換等。

如果有好的建議,請回報至周蟒的 issue tracker

2008年4月3日 星期四

文摘

周蟒(zhpy) 1.5.2 發佈

周蟒(zhpy) 1.5.2 發佈了, 代號"命運之輪".

繼續重構, 在包含本板本後的版本中, 呼叫 convertor 之前不再需要先呼叫 annotator 了,
如果 annotator 尚未呼叫過, convertor 會自動呼叫 annotator.

請使用
$ easy_install -U zhpy

命令來下載或更新周蟒版本,或前往網站查看更多關於周蟒的內容.

2008年3月21日 星期五

周蟒(zhpy) 1.5.1 發佈

周蟒(zhpy) 1.5.1 發佈了, 代號"女皇".
修復 1.5 版重構後導致 python 程式轉中文程式不正常的 bug.

請使用 「$ easy_install -U zhpy」 命令來下載或更新周蟒版本,或前往網站查看更多關於周蟒的內容 http://zhpy.googlecode.com

2008年2月29日 星期五

周蟒(zhpy) 1.5 發佈, 重構

周蟒(zhpy) 1.5 發佈了 (代號 皇帝)。
請使用 「$ easy_install -U zhpy」 命令來下載或更新周蟒版本,或前往網站查看更多關於周蟒的內容 http://code.google.com/p/zhpy/

這版本主要是對現有功能的維護與重構版本,一般用戶應該不會察覺到改變:

1. 更新關聯的套件
2. 將 merge 跟 rev_merge 函式合併
3. 加強 zhimport.py 並改名成 import_hook.py

周蟒相關消息請至官方網站查看
http://zhpy.blogspot.com/


zhpy Changelog
====================

1.5 (2/29/2008)
--------------------
code name: Emperor

*Changes*

* rename zhimport.py to import_hook.py
* rewrite import_hook from magiccodec, thanks weijr
http://weijr-note.blogspot.com/2008/02/python-magiccodec-01.html
* use isinstance(target,dict) instead of type({}), thanks weijr
* refactor merger
* merge rev_merger to merger
* refactor ini_annotator, py_annotator,
pattern, val_matching, rev_ini_annotator,
rev_py_annotator, trace_annotator to private method
* refactor to distill baseWord
* add some variable docstrings

*Features*

* add keywords:
* "屬性":"property", "属性":"property",
* add set methods keyword:
* "定集合":"frozenset",
* "清除":"clear",
* "複製":"copy","拷贝":"copy",
* "加":"add",
* "丟棄":"discard","丢弃":"discard",
* "聯集":"union","联集":"union",
* "交集":"intersection",
* "差集":"difference",
* "對稱差集":"symmetric_difference", "对称差集":"symmetric_difference",

*Fixes*

*Project Updates*

* update to pyparsing 1.4.11
* update setuptools to 0.6.8
* update epydoc to 3.0.1

*Contributors*

Fred Lin, weijr

2008年2月12日 星期二

周蟒 1.5 之路

最近 weijr 寫了幾篇很有意思的文章:



weijr 提出了透過利用 python 會在程式檔開頭讀取編碼設定 (encoding) 的方法,來使用 python interpreter 直接執行如周蟒等程式,並且提出了基於周蟒 1.4 修改後的實做,其中許多修改很值得參考。

Python MagicCodec 0.1 裡有個大量修改過的周蟒 1.4 版本。

看到 weijr 願意修改 zhpy 並發佈一個自己的版本我還蠻開心的,這表示周蟒開始值得其他人花心力來修改了,也是種肯定。
但同時警覺到: 讓人寧願自己修改而不是發個 patch 給我們,也表示周蟒還有不足之處。

因為周蟒是採取測試驅動開發,而且目標是相容多個 python 版本與平台,
因此在周蟒實做中,我會避免使用 python 2.5 的語法或 python 2.6/3.0 時即將淘汰的語法,
而且代碼需要通過全部測試,從而保證釋出版本的質量,使用者才能放心地採用或自由修改。

周蟒本來就是一個採取測試驅動開發,集合大家創意的中文(python)程式語言,許許多多的功能都是由不同人貢獻出來(可以看 ChangeLog),才有今天的周蟒。

周蟒 1.5 將繼續重構,並同時加入一些更進階的關鍵字,也許會在這版本或下個版本加入透過 encoding 來使用 python 直接執行周蟒的方法。(如果 weijr 肯發個 patch 過來就更快啦 :D)

如果對周蟒原始碼有興趣,可以透過
svn co http://zhpy.googlecode.com/svn/trunk/
來取得原始碼

周蟒原始碼總是維持隨時都是可工作的。

2008年1月17日 星期四

周蟒(zhpy) 1.4 發佈, Windows 用戶友善

周蟒(zhpy) 1.4 發佈了 (代號 倒吊男)。
請使用 「$ easy_install -U zhpy」 命令來下載或更新周蟒版本,或前往網站查看更多關於周蟒的內容 http://code.google.com/p/zhpy/

這版本加強了許多實用的特性:

1. 修復困擾許多新手的 Windows Interpreter 編碼報錯問題。
2. 開啟 zhpy interpreter 時會判斷系統編碼,自動顯示繁簡中文提示 (ex: 周蟒 1.4 於 darwin 基於 Python 2.5.1)。
3. 中文 traceback 支持(目前僅支援一般執行模式,不支援直譯器,Windows 下預設非 utf8 編碼,因此還看不到中文的 traceback),目前只有少數的中文 traceback 字典,請幫忙補完中文 traceback 翻譯條目。
4. 支持測試, 可以用 測試_xxx() 這樣的函數編寫測試用例. 編成 .py 後使用 nosetests 命令測試。

注意周蟒目前不支援 unicode string (u'哈囉') 的表示方式,會在之後版本修正。

周蟒相關消息請至官方網站查看
http://zhpy.blogspot.com/


zhpy Changelog
====================

1.4 (1/18/2008):
--------------------
code name: Hang Man

*Changes*

* change keyword:
* "元組" instead of "組合":"tuple",
* "元组" instead of "组合":"tuple",
* update example n_tabl.twpy

*Features*

* Introdure real chinese traceback support, currently works in compiler mode

*Fixes*

* Fix interpreter unicode issue mainly occured on Windows, thanks renhbo

*Project Updates*

* use setup.cfg to generate docs

*Contributors*

Fred Lin, renhbo