發表文章

目前顯示的是 2017的文章

Python 研究slice的用法

假設我們有一個長度為8的陣列a,其編號與對應到得值分別如下表。 a = [10, 20, 30, 40, 50, 60, 70, 80] 編號0 1 2 3 4 5 6 7 值 10 20 30 40 50 60 70 80 以往我們存取陣列的數值常常都是透過編號的方式,例如a[1]的值就是20。在python內可以使用一種更強大且方便的工具來操作陣列。 存取陣列內元素 slice的用法就是在中括號[]內加入冒號:,形式長這樣 a[i:j] 這是什麼意思呢? i為我要存取之陣列起始編號 , j為陣列之結束編號 。就是我要存取a陣列當中的從編號i到編號j的元素。注意,它是包含i,不包含j的。用數學的表示方式大概就是[i, j)。i, j如果有沒值的話就是代表該陣列的 起始點 與 結束點 。 用四個小範例來展示一下更加清楚。 a = [10, 20, 30, 40, 50, 60, 70, 80] print "#1", a #1: 單純先把陣列印出來看看 print "#2", a[:] #2: 不給i, j值,就是分別為0跟8的意思。所以一樣是印出陣列的全部值 print "#3", a[1:3] #3: 印出編號[1, 3)的兩個元素 print "#4", a[5:len(a)] #4: 印出第5個到第7個元素(len(a)為8) ---result--- #1 [10, 20, 30, 40, 50, 60, 70, 80] #2 [10, 20, 30, 40, 50, 60, 70, 80] #3 [20, 30] #4 [60, 70, 80] 其他i, j也可以為負的,在此先不討論,不過原理大致相同。 用slice插入元素 有時候我想要在陣列的前後插入,該怎麼辦呢?一般通常會使用insert這功能,但也可以透過slice來完成。 例如 a[len(a):] = [90, 100, 110] print "#5", a #5: 我想要在a陣列後方插入90, 100, 110這三個值,所以我在冒號的左邊,也就是起始位置i設為len(a),也就是8。代表

python 讀取健保IC卡資訊

圖片
關於讀取健保IC卡資訊並非只有 python 才能寫,像是 c/c++、java、c#等等...都應該可以讀取,本篇因為用到 APDU 的指令,如何使用,小弟也正在研究中,之所以會想寫這篇,正是心血來潮突然想來玩玩讀卡機,目前市面上很多種讀卡機RFID、或者是NFC....,類似的讀卡機其實可以衍申很多種應用程式,例如我們可以利用讀卡機開發門禁考勤系統、POS收營系統、悠遊卡扣款系統、或者是點名報到系統,而類似超商使用的悠遊卡讀卡機一般人未必會擁有,但有一種機器肯定是每個人都會有的那就是 "EZ100PU",自從學習 python 第一天開始,便從 web 延伸接觸底層開發,這兩年中不知不覺已經摸超過百種設備,但這項最簡單的設備,卻竟然我一直沒去注意過,所以,寫下筆記,就讓我利用 python 來玩玩 EZ100PU 讀健保IC卡。 本環境如下 acer NB WINDOWS 7 PRO python 2.7 swigwin-3.0.12 (請上網下載並記得放在C底下並在環境設定裡加入路徑) pyscard-1.9.6.tar (解壓縮後就到該目錄底下並下指令python setup.py install) 範例程式 from smartcard.System import readers                                                                                        # 這段為 APDU 協定所使用的命令,請自行上網查詢如何使用 SelectAPDU = [ 0x00, 0xA4, 0x04, 0x00, 0x10, 0xD1, 0x58, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00 ] ReadProfileAPDU = [ 0x00, 0xca, 0x11, 0x00, 0x02, 0x00, 0x00 ] # 獲取所有可用的讀取器 r = readers() print "Available readers:", r reader = r[0] print "Using:&quo

PHP 利用wake on lan 喚醒電腦

這是非常好用的工具,對於系統維護管理很便利,目前的電腦主機板均都支援網路喚醒開機,這次用PHP簡單寫一個程式來喚醒電腦主機,萬一主機因為停電、或者是癱瘓了,還可以利用wake on lan的方式來喚醒,前提是電腦主機板要設定好wake on lan。 index.php <?php mb_internal_encoding('UTF-8'); mb_http_output('UTF-8'); ob_start('mb_output_handler'); $_targets = array(      'ore-pc-1' => 'D8CB8AF1DBB4', ); ?> <html lang="ja"> <head>   <title>Wake On LAN</title>   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <h1>Wake On LAN</h1> <?php if (array_key_exists('pc', $_GET) && array_key_exists($_GET['pc'], $_targets)): ?>   <h2><?php echo h($_GET['pc']) ?>MagicPacket送出成功</h2>   <?php wake('255.255.255.255', $_targets[$_GET['pc']], 9); ?> <?php endif; ?> <ul> <?php foreach ($_targets as $name => $mac): ?>   <li><a href="?pc=<?php e