十月 9, 2011

電腦做什麼事
pydoing
程式語言教學誌 is about »

tag cloud

» HTML DOM 快速導覽 - window 物件的屬性 location

window.history 回傳 location 物件,其記錄瀏覽器 (broswer) 所在的頁面資訊。
繼續閱讀


十月 8, 2011

電腦做什麼事
pydoing
程式語言教學誌 is about »

tag cloud

» HTML DOM 快速導覽 - history 物件的方法 go()

history.go() 需要以整數當參數,使瀏覽器 (broswer) 走到參數指定的網頁,正數往前走,負數往回走。
繼續閱讀


» HTML DOM 快速導覽 - history 物件的方法 forward()

history.forward() 使瀏覽器 (broswer) 到下一頁,也就是拜訪過網頁中的下一個網頁。
繼續閱讀


» HTML DOM 快速導覽 - history 物件的方法 back()

history.back() 使瀏覽器 (broswer) 回到上一頁,也就是上一次拜訪過的網頁。
繼續閱讀


» HTML DOM 快速導覽 - history 物件的屬性 length

history.length 回傳瀏覽器 (broswer) 走過頁面的長度。
繼續閱讀


» HTML DOM 快速導覽 - window 物件的屬性 history

window.history 回傳 history 物件,其記錄瀏覽器 (broswer) 走過的頁面。
繼續閱讀


十月 7, 2011

limodou的學習記錄
limodou
is about »
» uliweb auth½øÐÐÁËÓÅ»¯

Îĵµ¿ÉÒԲμû:http://uliweb.readthedocs.org/en/latest/auth.html

ÓÅ»¯ºóµÄ¹¦ÄÜÓëÔ­À´µÄʹÓÃÓе㲻ͬ£º

1. User±í‰ˆ¼ÓÁËnickname×Ö¶Î

2. Ô­À´auth/__init__.pyÖеÄif_login¸ÄΪÁËhas_login£¬²¢ÇÒÔ­require_loginÖ»ÊÇdecorator£¬ÏÖÔÚΪ¼È¿É×÷Ϊdecorator£¬ÓÖ¿É×÷Ϊһ°ãº¯ÊýʹÓá£

3. ½«require_loginдµ½settings.iniÖÐFUNCTIONSºÍDECORATORS£¬Óû§¿ÉÒÔͨ¹ý£º

from uliweb import functions, decorators

functions.require_login()
@decorators.require_login

À´·Ö±ðʹÓÃÁ½ÖÖÐÎʽ¡£

4. functionsÊÇЉˆµÄÈ«¾Ö¶ÔÏó£¬ÓÃÓÚ´Ósettings.iniÖУ¬Í¨¹ý¡°.function"µÄÐÎʽÀ´»ñÈ¡FUNCTIONSÖеĺ¯Êý£¬ºÍdecoratorsµÄʹÓ÷½Ê½ÀàËÆ¡£

5. ÔÚsettings.iniÖÐ×¢²áÁË/login, /logout URL£¬Ìí¼ÓauthÖ®ºó¾ÍÊÇȱʡʹÓÃÁË¡£


Àà±ð£ºUliweb ²é¿´ÆÀÂÛ

十月 5, 2011

marr's weblog
marrtw
marr weblog is about »

tag cloud

» Link Integrity Checks

Plone Site Setup 裡的 Editing 設定介面,勾選 Enable link integrity checks 後,可以啟動連結檢查功能,也就是說,某個項目被刪除或搬移時,如果發現有其他項目連結到它,系統會提醒無法刪除或搬移,並在 var/log/instance.log 裡,記錄 TypeError: ('Could not adapt', None, <InterfaceCalss plone.uuid.interfaces.IUUID>) 的錯誤訊息。只要停用連結檢查功能,完成動作後再恢復即可。

UID (Unique identifier) 是系統唯一的識別碼,即使內容項目被改名或搬移,它的 UID 仍然維持一致。像 Archetypes、ReferenceField、Kupu 都有用到 UID 服務,不過,Dexterity 使用 integer id 來管理關連,並未使用 UID。

十月 4, 2011

marr's weblog
marrtw
marr weblog is about »

tag cloud

» PIL vs Pillow

安裝 Plone 4.x 的時候,通常會看到 Pillow 的身影,它是 PIL (Python Image Library) 的分支,因為 Plone 社群需要一份相容 setuptools 的版本,於是開始維護這個分支,考量點在於簡化安裝流程。

十月 3, 2011

電腦做什麼事
pydoing
程式語言教學誌 is about »

tag cloud

» HTML DOM 快速導覽 - window 物件的屬性 frames

window.frames 回傳網頁中所有內嵌網頁的 <frame> 或 <iframe> 的集合物件 (object) 。
繼續閱讀


» HTML DOM 快速導覽 - window 物件的屬性 frameElement

window.frameElement 回傳內嵌元素 (element) 如 <object> 或 <iframe> 的參考物件 (object) ,如果不是內嵌元素則回傳 null
繼續閱讀


» HTML DOM 快速導覽 - window 物件的屬性 document

window.document 回傳網頁文件的 document 物件 (object) 。
繼續閱讀


十月 2, 2011

電腦做什麼事
pydoing
程式語言教學誌 is about »

tag cloud

» HTML DOM 快速導覽 - window 物件的方法 open()

window.open() 用為開啟新增的 window 視窗。
繼續閱讀



hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 「股票隨便買然後長抱」是會賺錢? 就跟擲銅板的玩法一樣!

學弟一直不相信我說的:「現在有閒錢(也就是說別拿學費來買),就是買股票,買什麼? 0050 ! 因為他們現在只能存小錢,所以現在買 0050 的零股就夠了。等到湊成 20 萬以上,再來股票市場中隨便買(註1),好公司也買,爛公司也買,類別愈多,家數愈多,這人生的金融投資策略也就夠了。」

學弟為什麼不相信呢? 我想是這個方法太簡單了,不用分析公司基本面,不用知道它們是幹什麼的,不看技術線型,這對我們『愛研究』的研究生來說,太沒挑戰性了,而且這樣買股票都能賺錢,實在太沒天理了。

但是我在唸大學時,可是廢寢忘食地研究公司基本面,研究技術線型,搞到後來,自己覺得都可以去考證券/期貨營業員執照了,結果還是把錢賠光光,這難道有天理嗎?

因為賠過錢,所以才能深刻地體會:「股票市場不一定是用心用力玩的。」

「股票市場那該怎麼玩呢?」

就當擲硬幣一樣玩就行了,什麼!!! 用賭博的方式來玩股票,這不是富貴險中求嗎? 當然不是囉!

這「擲硬幣」有趣的地方在於它完完全全只是數學而已。

試想一個公正銅板,正面出現的機率是 50% ,反面出現的機率是 50%,猜對給賭金 1 倍的獎金,猜錯則失去賭金。在這種賭博中,如果讓你賭個 1 萬次,你覺得會賺多少? 我會說:「別找我作這檔事,這只是浪費時間而已。」因為在這個公平賭博中,期望值等於本金,所以在理想情況下,玩了 1 萬次,手頭上的錢還是一樣多。計算方式如下:

(2 * 50% + 0 * 50%) / 100% = 1

但如果它不是公正銅板呢! 而是正面出現的機率是 51% ,反面出現的機率是 49%,賠率不變,則期望值會變成 (2 * 51% + 0 * 49%) / 100% = 1.02 。

這賭博我是鐵賭的,而且只賭正面,還會跟莊家玩到天荒地老,玩到他沒錢賠我為止。在這種賭博之中,如果我跟莊家玩 1 萬次,而且每次壓 1 元的話(幹麼那麼客氣,有這種笨莊家,當然是壓上我全部身家),理論上我總共會賺 200 元。

那如果遊戲改成正面出現的機率是 60% ,而猜對賠率是 1.1 ,猜錯還是 0 ,那該玩嗎? 這時的期望值是

(1.1 * 60% + 0 * 40%) / 100% = 0.66

如果是我的話,我選擇當莊家,找你們來當賭客。

所以說,要不要賭博,完全只看期望值有沒有大於 1 就行了。沒大於 1 的賭博那是給笨蛋玩的(好像在說我自己,因為我會買樂透)。

換成股市的環境,如果你知道明天開盤上漲的機率是 90% ,下跌是 10% ,你會不會今天買股票呢???

希望你回答我:「不知道耶~」

如果你想回答我:「當然會,而且還要壓下全部家當。」那就糟了。因為我沒跟你講上漲幾點、下跌幾點呀!

因為明天上漲 2% 的機率若是 90% ,下跌 50% 的機率是 10% ,則期望值是

2 * 0.9 - 50 * 0.1 = - 3.2(%)

這種股票還是不要買比較好。

講到這裡,你們一定還沒清楚為什麼要長抱股票呢? 因為沒有人能算得出來明天上漲幾 % 的機率值,我講了這麼一大片,那還不是廢話。

是呀! 我算不出明天的機率值,但我可以回顧過去的歷史。以台灣加權股價報酬指數(為什麼不是以加權指數計算)來看, 2003 年 1 月 1 日是 4524.92 點,到 2011 年 3 年 16 日是 11067.18 點,中間過了 98.5 個月。它總共上漲了 2.445828 倍,也就是每個月它平均上漲了 1.00912139 倍。以 1 個月視為一次「擲硬幣」賭博的話,它的期望值是大於 1 的,事實上,這期望值就是它的平均月報酬率,而它的平均年化報酬率是 1.00912139^12 = 1.1151 ,也就是 1 年有 11.51% 的報酬率,這已經幹掉一堆基金經理人的績效了。

也就是說,在股市遊戲中,雖然我們不知道每次賭博的賠率及機率,但可以從結果直接觀察得之。假設我在 2003 年 1 月 1 日時,以市值權重買進全市場股票,那麼到了 2011 年 3 年 16 日時,整個投資組合 有 2.4458 倍,這也相當讓我玩了 98.5 次的「不公正銅板」遊戲,而每次的期望值是 1.00912139 。

好啦! 你會說,我舉的歷史數據不過區區 8 年多一點,這有什麼好代表整個台灣股市歷史呢! 各位可以看看美國股市從 70 年代到現在的線圖,可以知道長期趨勢就是走升的,而且這還是有減去配息的指數,如果還原現金配息,它的走勢還會更陡。

台灣股市的線圖也差不多是這樣的,我在埔里元富有看過一張從 70 年代開始統計到現在的趨勢圖,它的縱座標還是 log 化的,要不然無法容下 100 點到 12000 點的數據。可惜網路上找不到這張圖。

所以說,從歷史角度來看,股市的期望值是大於 1 的(註2)。既然股市是個不公正的正面(多頭)銅板,你捨得不玩這遊戲嗎? 又或者說,在擲銅板的過程中,若連續出現 1000 次的反面,你會鬆手嗎? 鬆手了,那你將錯失後面那 1040 次的正面(以 51/49 的機率分佈來看)。

註1: 其實也沒那麼隨便,最少要比較一下公司的現金配息及股價歷史,也就是現金殖利率,愈大者要早點買、且買多一點。
註2: 但要平均年報酬率是大於一年期平均定存利率的才值得玩,不然直接放銀行定存會更划算。

» 2011 被動投資回顧

這麼 2011 年還沒結束,我就在作回顧呢?

因為配息已經告一個尾聲了,今年就算再買股票,也拿不到利息了。

從我 2008 年建立 56 支股票投資名單後,到現在 2011 年了,名單也增加到近 200 支股票(當然還沒買全),每年所拿到現金利息(含扣抵稅額)除以總投資本金後,大約如下:

2009: 3%
2010: 3.6%
2011: 5%(以 17% 扣抵稅率試算)

而平均購買成本約在 6378 點左右。回想起 4 年前,馬總統當選,我花了 4 萬 5 買了合庫、日月光、雷虎。從 9300 點開始一路買到 4000 點,再買到 9100 點,到現在的 7200 點。這平均持股成本在 6378 ,實在讓我非常滿意。

事實上,我有印象以來的持股成本應該是在 6700 左右才是,怎麼我在 7000 點以上繼續買進,這平均成本反而下降了呢?

原因就是除權、除息,就像開發工銀手上擁有的聯電,每股不到 3 元一樣,經過時間的發酵,聯電公司馬不停蹄的賺錢後,讓開發工銀手上握有的成本愈來愈低。

而且我覺得我運氣很好(真的嗎? 沒把年化報酬率算出來跟大盤比,這都只是感覺而已),手上不小心有了宏達電、統一超(當然都是零股啦),一個有 300%+ ,一個有 250%+ 的報酬率,而踩到的地雷也只有力晶(-66%)、茂德(-90%)、盈正(-75%),還好它們的投資比率都不高。

經過這 3 年多來施行被動投資策略的成果來看,我十分滿意。當股票漲,我高興,當股票跌,我也高興(當然是有錢買才高興,還好我年輕有工作作,能賺錢買股票),無處不怡然自得呀!

你被動了嗎?

» 「投資人宣言」讀後感

From 博客來

這書裡講的概念,大概都在綠角投資筆記、約翰.柏格以及威廉.伯恩斯坦(同本書作者)的書中看過了,像是

  • 高報酬往往伴隨著高風險,但高風險不一定帶來高報酬

  • 分散式投資: 金錢投資的目的並不是獲取暴利,而是安穩、優雅地渡過退休生活

  • 好公司,大多是壞股票; 壞公司,整體而言,是好股票

  • 主動投資長期績效往往不如被動投資

  • 績效來來去去只有成本是固定的

  • 金融從業人員不一定是站在客戶的立場

  • 如何作好資產配置(股債比)

  • 掌握好個人的人力資本

所以一直以來,我愛當金融保險業者的股東勝於當他們的顧客,努力學習程式設計及其他學問提升個人人力資本,先投資自己才作金融投資,並且分散式地購買各種類股(不過,金融股還是佔了半數),達到「如何閱讀一本書」中所提之「贊同實用書之後,你應該實踐書中理論」(在第十三章)。

不過,我的實踐也還不到百分百,像是國內債券及國外股債這二項,我的資產比例還是 0% 。有鑑於此,我開始研究 006202寶富盈 ETF 。過陣子,再向大家報告。

另外,這本書帶給我惟一的新收獲就是「高經濟成長體,不見得是好投資對象」,但理由並不是「好公司,爛股票; 爛公司,好股票」。所謂的「好公司,爛股票」是因為投資人偏好好公司致使其股票的風險貼水減少所以實質報酬率降低。然則在本書中,作者實際提出中國、印尼、南韓、…台灣等亞洲新興市場國家與美國在 1988 ~ 2008 年之間的年化 GDP 、 年化名目股市報酬率比較表(表2.3),從表中,可看到美國以 2.77% 的 GDP 數字卻能提供股市投資人 8.8% 的股市報酬,但中國以 9.61% 的 GDP 卻只能帶來 -3.31% 的股市報酬,原因在於「股票稀釋和安全法規不足而發生的明目張膽竊取」

這現象帶給我相當大的震憾,原來法治國家的好處是這麼棒。中國股市的這種表現也才與我的日常經驗搭上線。因為一直以來,聽別人說:「在大陸作生意,給公務員的額外費用是明明白白、清清楚楚的規費」,而這些沒放到國家口袋,從公司股東口袋搬出來的錢,果然是有反應在股市報酬率上。

雖然台灣的數據是贏過中國大陸的,但這也沒什麼好高興的。至今,我們親愛的同胞: 王又曾、曾正仁、陳由豪、朱安雄同志都還在海外過著顛沛流離的生活,什麼時候才能盼著他們回到溫暖的故鄉:「台灣」呀!


電腦做什麼事
pydoing
程式語言教學誌 is about »

tag cloud

» HTML DOM 快速導覽 - window 物件的方法 close()

window.close() 用為關閉新增的 window 視窗。
繼續閱讀


» HTML DOM 快速導覽 - window 物件的屬性 closed

window.closed 回傳 window 視窗是否被關閉,關閉回傳 true ,沒有關閉回傳 false
繼續閱讀


十月 1, 2011

Thinker
heaven.branda
Thinker
» 先承認你要找的是奴才吧!

剛才看到一篇新聞 linkname:[科技大老:人才問題最迫切] http://tw.news.yahoo.com/article/url/d/a/111001/4/2zpaa.html ,其中提到 {{{ 以人才供需問題最迫切。王振堂表示,前次就曾提議本勞與外勞薪資制度應脫鉤, 但現在的需求卻比4年前更強烈,企業找不到人,高級人才、工程師的需求更是迫 在眉睫,電子資訊人才缺口1萬人,其中研發軟體對應求職者不到1個人,人才供 給失衡將嚴重影響產業發展。 }}} 我不襟想到,你要找的是人才還是奴才? 本勞和外勞薪資脫鉤,說的應該是外勞 不受本勞的最低工資限制。但如果因為本國找不到足夠的高級人才、工程師等, ...


hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 再改寫「背包問題」的求解程式碼

之前的作法是將 cut 函式所計算的 list 結果直接 append 到全域變數 tmps 中,這樣的 cut 函式是無法作 decorator 的。

新方法則是把 cut 函式的 input, output 重新規劃,讓答案就是 return 值,這樣 input 就能對應到單一 output ,透過這個特性,我們就能加上一個 @cache decorator ,去作快取。因為在求解的過程中,勢必會遇到重覆的 input ,有了快取,可以少算一次。

其中的 _no_cache_count 值指的是第一次遇到的 input 值,而 _cache_count 值則是利用 dictionary 找到答案的次數。

要怎麼建構出 cut 函式的樣貌? 我們一開始先抽象地想像這個 cut 函式要作到的事就是 answer = cut(bar, sizes)

answer 是我們要的答案,結構是 list of list( [[ , , , ..], [ , , , ..], ..] )。而 bar 是原長度, sizes 則是需求尺寸的 list 。

假設我們帶 bar = 10, sizes = [7, 5, 3, 2] ,那麼經過 cut 運算,就能得到一個 list of list 的 answer,那到底 answer 是多少? 我們先不管。但我們可以知道 10 拿給 7 去切,可以得到 0, 1 兩種組合。

所以 cut(10, [7, 5, 3, 2]) 一定會等於 cut(10, [5, 3, 2]) 的結果其解全部在元素 0 的位置插入 0 + cut(3, [5, 3, 2]) 的結果其解全部在元素 0 的位置插入 1 。

一樣地, cut(10, [5, 3, 2]) 也會等於 cut(10, [3, 2]) 的結果其解全部在元素 0 的位置插入 0 + cut(5, [3, 2]) 的結果其解全部在元素 0 的位置插入 1 + cut(0, [3, 2]) 的結果其解全部在元素 0 的位置插入 2 。

直到 cut(10, [2]) 時,我們知道它的結果就是 ([5], ) ,為什麼是一個 tuple of list ? 因為之前我們就定義 cut 一定要回傳 list of list ,而因為這次的 cut 回傳值本身並不會被修改,所以傳個 tuple 回去,可以少用一滴滴的記憶體(應該是一滴滴而已)。

當開始有 answer 被回傳後,我們就開始作合併的工作(就是把前一個需求尺寸的用量插入 answer 內的 list)。合併後再回傳。

程式碼如下,不過在實際跑的時候,有二件事我不能理解,為了比較 cut 與 cache_cut 的效率差別,我在同一個行程上分別跑了兩次 cut, 兩次 cache_cut ,而順序是 cache_cut, cut, cut, cache_cut ,cache_cut 比 cut 快,這很容易理解,但第二次的 cut 居然會比第一次的 cut 還慢,這我就不懂了。

另外,我每次跑 cut 之前,都是用 cs = CutSteel(bar, sizes) 創建新的物件,為什麼第二次跑的 cache_cut ,它還是可以找到第一次 cache_cut 所儲存的 CACHE 呢?

最後,我還得到一個結論,當解答組合數不多時,用 cut 會比 cache_cut 快。因為小題目,遇到重覆 input 少,但如果還是全部的 input 要儲存 CACHE ,那所花費的時間還不夠重覆 input 所節省的時間了。


1 #!/usr/bin/env python
2 # -*- coding: utf8 -*-
3 import types
4
5
6
7 class CutSteel:
8 u""" 目的:解鋼筋切割的組合問題(也就是背包問題),但不只是求組合數,
9 也要把所有的組合列出。
10 例: 10 公尺長的鋼筋,要切成 7, 5, 3, 2 公尺等,有多少種組合。
11 解:
12 7 5 3 2
13 [1, 0, 1, 0]
14 [1, 0, 0, 1]
15 [0, 2, 0, 0]
16 [0, 1, 1, 1]
17 [0, 1, 0, 2]
18 [0, 0, 3, 0]
19 [0, 0, 2, 2]
20 [0, 0, 1, 3]
21 [0, 0, 0, 5]
22 """
23 def __init__(self, bar, sizes):
24 if type(bar) != types.IntType or bar <= 0:
25 raise ValueError(u'只接受正整數')
26 for s in sizes:
27 if type(s) != types.IntType or s <= 0:
28 raise ValueError(u'只接受正整數')
29
30 self._no_cache_count = 0
31 self._cache_count = 0
32
33
34 def cache(my_function):
35 CACHE = {}
36 def inner_function(*args):
37 key = str(args[1:])
38
39 # try:
40 # #INFO 用 try 的會比 if 慢一點點。只慢一點點。
41 # CACHE[key]
42 # args[0]._cache_count += 1
43 # except KeyError:
44 # args[0]._no_cache_count += 1
45 # CACHE[key] = my_function(*args)
46
47 if not CACHE.get(key, None):
48 CACHE[key] = my_function(*args)
49 args[0]._no_cache_count += 1
50 else:
51 args[0]._cache_count += 1
52 return CACHE[key]
53
54 return inner_function
55
56
57 @cache
58 def bag(self, total, sizes):
59 u""" 只計算組合數 from thinker"""
60 propers = tuple([sz for sz in sizes if sz <= total])
61 if not propers:
62 if total >= self._minsize: return 0
63 else: return 1
64
65 num = self.bag(total - propers[0], propers) + self.bag(total, propers[1:])
66 return num
67
68
69 def cut(self, total, sizes):
70 u""" 本函式的 input 為「被切割長度」及「欲切割的種數」。
71
72 output 為該 input 的所有組合。
73 """
74 if len(sizes) == 1:
75 return (
76 [(total / sizes[0]), ],
77 )
78 elif total < sizes[-1]:
79 return (
80 [0,] * len(sizes),
81 )
82
83 return [
84 [j] + tr
85 for j in xrange(0, total / sizes[0] + 1)
86 for tr in self.cut(total - sizes[0] * j, sizes[1:])
87 ]
88
89
90 @cache
91 def cache_cut(self, total, sizes):
92 u""" 因為 cache_cut 函式本身是具有固定 input 就會產生固定 output ,
93 它們具有一對一或多對一的關係,所以我把 input,
94 output 放在一個 dictionary 中,若程式計算到相同的 input 時,
95 可免計算,直接從 dictionary 拿答案。
96
97 其實本函式就是複製 cut 函式後,
98 將函式內程式碼中的 self.cut 改成 self.cache_cut ,
99 並在函式名前加上 @cache 而已。
100 """
101 if len(sizes) == 1:
102 return (
103 [(total / sizes[0]), ],
104 )
105 # elif total < sizes[-1]:
106 # #INFO 多這個判斷式反而變慢了。因為已經用 cache 了,
107 # #所以那些 total < sizes[-1] 情況會變成比較少,
108 # #然而在一個 cache_cut 函式中多加一個 if ,則判斷時間會多一倍,
109 # #加速效果反而不如預期。
110 # return (
111 # [0,] * len(sizes),
112 # )
113
114 return [
115 [j] + tr
116 for j in xrange(0, total / sizes[0] + 1)
117 for tr in self.cache_cut(total - sizes[0] * j, sizes[1:])
118 ]
119
120
121
122 from time import time
123 import sys
124 if __name__ == '__main__':
125 #bar = sys.argv[1:]
126 #sizes = sys.argv[2:]
127 bar = 10
128 sizes = [7, 5, 3, 2]
129 sizes.sort(reverse=True)
130 sizes = tuple(sizes)
131
132 cs = CutSteel(bar, sizes)
133 cs._minsize = min(sizes)
134 print 'Total count: %s' % cs.bag(bar, tuple(sizes))
135
136 cs = CutSteel(bar, sizes)
137 time0 = time()
138 result = cs.cache_cut(bar, sizes)
139 print 'cache_cut spend time: %s' % (time() - time0)
140 print len(result)
141 print('\tno cache count: %s, cache count: %s'%(cs._no_cache_count, cs._cache_count))
142
143 # cs = CutSteel(bar, sizes)
144 # time0 = time()
145 # result = cs.cut(bar, sizes[:])
146 # print 'cut spend time: %s' % (time() - time0)
147 # print len(result)
148 # print('\tno cache count: %s, cache count: %s'%(cs._no_cache_count, cs._cache_count))
149 #
150 # cs = CutSteel(bar, sizes)
151 # time0 = time()
152 # result = cs.cut(bar, sizes[:])
153 # print 'cut spend time: %s' % (time() - time0)
154 # print len(result)
155 # print('\tno cache count: %s, cache count: %s'%(cs._no_cache_count, cs._cache_count))
156 #
157 # cs1 = CutSteel(bar, sizes)
158 # time0 = time()
159 # result = cs1.cache_cut(bar, sizes[:])
160 # print 'cache_cut spend time: %s' % (time() - time0)
161 # print len(result)
162 # print('\tno cache count: %s, cache count: %s'%(cs._no_cache_count, cs._cache_count))
163
164 for i in xrange(0, len(result)):
165 print(result[len(result)-i-1])

RTER

一頁新聞

A Django site.