2018年5月11日 星期五

第一個作品:工讀時數產生器

自學 Python 兩個月,寫出了人生中的第一個小作品,是個可以亂數跑出時數的小程式.

這個程式的功能,是幫助我填寫每個月的工讀生時數表.每個月我都需要幫工讀生填報工讀時數,工讀生人數眾多,一筆一筆 key in,每次也得花上不少時間.所以我寫了這個可以隨機跑出每月日期和打卡時間的程式,只要輸入幾個關鍵資料,就可以自動帶出一個月的工讀時間表,並算好時數和薪資總額.

先來看看整個程式長什麼樣子:


介紹一下,這個是用 Sublime 文字編輯器寫的,好處是用顏色提示各種語法功能,對我這種初學者而言很方便.


接下來一段一段說明我的編寫邏輯:

首先,引入 random 模組,也是這個程式的重點--讓後面可以隨機跑數字出來.接著,我們必須決定要做哪個月份的薪資表,一年裡面分成大月31天,小月30天,2月28天,所以我用 if 來篩出大月小月和2月(當然你也可以都用30天就好,但這樣就永遠不會有31號),最後用 mon-days 代表這個月份的總天數.

















再來,由於我的工讀生們週末都不會上班,所以我得先刪掉每個月份的星期六和星期日.目前想到的做法是先輸入該月的第一個週六和週日各是幾號,然後分別加上7的倍數,就是當月所有的週六(f6)、週日(f7)日期,再用 if + continue 的方式跳掉這幾天,最後重新產出一個只有一到五週間的新日期清單 d_list.










上面這一段完全是徒法煉鋼,也花了我最多的時間,但目前尚未想到更好的做法,希望日後能改得更精簡.


ok,確定了可以挑選的日期清單之後,接下來步驟就相對簡單,只要用 random 隨機挑出想要的日期就好.一開始先輸入這個月份工讀生們來工作的「天數」workday,再用 random.sample 的功能隨機挑出日期,建立 date_list,照順序排好,就成為待會兒會看到的工讀生上班日.











日期都選定了,接著要填入上下班的打卡時間.工讀生原則上都是 09:25 - 09:30之間打卡上班,17:00 - 17:10之間打卡下班,小時的時間都已固定,只要用 random.choice 去亂數選出分鐘的部分就可以.
另外,要特別注意,我是直接把演算式包在 print 裡面,所以看起來有點雜亂,請包涵.













最後,算出總時數和總薪資.這部分基本上和上面語法不太有關係,我的工讀生就是每天工作 6.5 小時,所以只要用 6.5 * 工作天數就可以,薪資則是總時數 *140 元時薪.









實際跑程式的狀況是這樣的:
一開始先問你要做幾月份? (Mon: )
接著問你這月份的第一個星期六是幾號?(First Saturday? )
第一個星期天是幾號?(First Sunday? )
這個月工作幾天?(How many days do you work? )
都填入資訊之後,就會跑出這樣子的清單:























日期和時間分布得非常自然,都避開週末,還幫你把總時數和薪資都算好,更不用擔心會被會計阿姨抓包是捏造出來的工讀時數表呢 XD

當然他還是有非常多我沒有辦法解決的小問題,例如亂數跑出來的個位數前面沒辦法自動產生"0",所以只能我自己先在前面加字串"0"... 這類細節問題不勝枚舉,只能說表面上看起來平凡無奇的訊息背後,或許都有著龐大複雜的語法運算.


總而言之,這是一個非常簡單、非常限定、徒法煉鋼的一個程式,是我的第一個小作品.儘管簡陋又雜亂,但剛完成時還是頗為感動.附帶一提,這個小東西花了我一個下午的時間,也算是我初學 Python 的自我驗收吧.