2014年8月8日 星期五

演算法quine python範例

Quine演算法為程式語言經過編譯之後
執行顯示出來的內容必須與原始碼相同

wiki介紹


原本以為很難
要描述顯示出來的內容必須再新添加內容
這樣顯示的內容又會再增加
好像無解一樣

實作後發現比想像中簡單多了

python範例:

s="quine"
v="s=v=l=n='n p="
l=':"()[]+\\'
n='\n'
p='print(v[:2]+l[1]+s+l[1]+n+v[2:4]+l[1]+v+l[1]+n+v[4:6]+v[8]+l+l[7]+v[8]+n+v[6:9]+l[7]+v[9]+v[8]+n+v[11:13]+v[8]+p+v[8]+n+p)'
print(v[:2]+l[1]+s+l[1]+n+v[2:4]+l[1]+v+l[1]+n+v[4:6]+v[8]+l+l[7]+v[8]+n+v[6:9]+l[7]+v[9]+v[8]+n+v[11:13]+v[8]+p+v[8]+n+p) 

複製code執行,顯示結果將會和code一模一樣

2014年7月26日 星期六

Python for對不同datatype的測試


python的for不同於其他語言
感覺簡潔而且強大了許多
但是往往使用起來對概念的理解上也有點心虛阿XD

所以特別測試一下了解for對不同資料型別的處理方式

字串的處理:


for char in string:
  print char

會計算字串有幾個字元
有幾個字元就迴圈幾次


a = "12345"

for i in a

  print i



結果

1

2

3

4

5






列表的處理(Tuple相同):


for element in list:
  print element

會計算列表有多少個元素
有多少個元素就迴圈幾次

a = ( 'L1' , 'L2' , 'L3' , 'L4' , 'L5' ) for i in a
  print i

結果
L1
L2
L3
L4
L5


字典的處理:


for key in dictionary:
  print key

for key in dictionary
  print dictionary[key]  #印出value

有多少個key就迴圈幾次
排列的順序與key值有關
也就是會由小到大來print出來
如果key是string則會以迭代器的位置來開始印
所以想使用for在dictionary上面
最好key值使用integer較好控制
使用string為key值可能會出現非預期的錯誤



a = { 1:'a', 3:'b', 2:'c', 4:'d', 5:'e' } #注意key順序不同


for i in a


  print i





結果以key值大小排序


1

2

3

4

5



如果想要取出value值
則使用
for i in a
  print a[i]
結果以key值大小取出value值
a
c
b
d
e

2014年7月25日 星期五

正規表示式 regular expression 學習


常常看到程式中出現類似亂碼之莫名其妙的東西
譬如
^\d{3}\s(\w+)&
原來是叫正規表示式阿
也有人叫正則表達式
學名叫regular expression
總而言之就是一種字串的篩選器

regular expression常見於各種語言都會用到
也就是三不五時看到別人python內import的re

常用的部分
\d 數字
\w 任意字元含數字
\s 任意空白字元 space tab都算
{3} 乘以三次\d\d\d 等於\d{3}
( ) 擷取器 abc  a(b)c  b會被擷取出來
. 任意字元
+ 任意字串不包含自己本身
* 任意字串含自己本身
[] 就是or啦 [abc]de , ade,bde,cde都符合
[^] 就是nor啦
^ooxx&  ^開頭&結尾 嚴謹篩選,前後有東西都不合格


Regexone非常棒的教學練習網站
http://regexone.com/

基本上全部的練習做過一遍
應該就都懂了


python sys.argv[]用法


常看到python中出現sys.argv[]這東西
找了些資料總算理解了
紀錄一下備忘

sys.argv[]是python獲取命令列參數的方法
譬如我們在terminal中會輸入的指令
ls -a
-a就是命令列參數
sys.argv[0] 代表了文件的檔案名稱本身
意思就是ls
sys.argv[1] 就代表了-a

以下是參考網路的範例並修改成容易理解的方式




# -*- coding: utf-8 -*-

import sys>



>#建立一個讀取檔案的function能將檔案內容print出來

def readfile(filename): 

 '''read file and print'''

 f = file(filename)

 while True:

  line = f.readline()

  if len(line) == 0:

   break

  print line, 

 f.close()

 

#開始對sys.argv下定義

if len(sys.argv) < 2: #len小於2也就是不帶參數啦

 print 'no argument'

 sys.exit()

if sys.argv[1].startswith('--'):

 option = sys.argv[1][2:] # 取出sys.argv[1]的數值但是忽略掉'--'這兩個字元

 if option == 'version': 

  print 'Version 1.2.3'

 elif option == 'help':

  print 'help documention'

 else:

  print 'only --version --help can be used'

  sys.exit()

else:

 for filename in sys.argv[1:]: #檔案名稱於參數位置時讀取檔案

  readfile(filename)



"""

此檔案名稱為readfile.py

則可以用readfile.py --version來查詢版號

readfile.py --help來查詢help文件

readfile.py readme.txt 可以執行function

"""

2014年7月20日 星期日

AWS (Amazon Web Services) 練習django架站與linux shell的好工具


今天跟著教學申請了一個亞馬遜雲端服務帳號
http://blog.rx836.tw/blog/first-amazon-web-services/

原本一直考慮將我的windows換成ubuntu的想法可以暫停了
windows對於部分開源軟體的安裝實在是有點頭大
但是把我電腦重灌成linux使用起來可能就不是那麼方便了

AWS目前有一年免費可以使用
只要不要超過流量的話
如果真的能架出超過流量的網站(非用來大量上傳下載之類的)
我想付那個費用也是值得的

整個申請流程還算簡單
按照上面的Link做很快就能申請完成了
也速度建置了django基本的運作

目前容易卡關的小細節就是
AWS內運行的Instance並沒有對外的public IP
必須去申請一個
在左方控制那邊的 Elastic IP
申請完之後再把它allocate到你正在跑的instance就行了
不過ssh會被斷線要再重連一次
另外就是security group要設定好
不然外面連不進去也沒有用

Django的測試伺服器必須記得是使用

python mange.py runserver 0.0.0.0:8000
不設定0.0.0.0這個any ip的話
會只給本地端連線
自己的瀏覽器會無法連線過去

最後
不使用了記得到Elastic IP頁面Release IP
據說占著茅坑不拉屎會被罰錢




2014年7月18日 星期五

git 心得整理


Git是使用於版本控制的程式
GitHub是著名的Git網站也就是repository

Git有提供git shell能透過command line直接對repository下達clone push pull等等的命令
Git shell documentation
http://git-scm.com/docs/git-shell.html

Git shell使用ssh遠端加密操作
也就是自己電腦需要有private_key而public_key需要置放於repository
簡單的來說public_key就是鎖
private_key就是鑰匙
你可以將public_key放在很多repository
自己的電腦只要有private_key就能夠遠端登入每個有public_key的repository
產生key的方法為
開啟git shell輸入以下指令

ssh-keygen -t rsa -C "username@emailhost"
之後將private_key放置於program files\Git\bin內
並將public_key打開複製裡面的文字放置到github的產生SSH內

GitHub Default Storage的path如果為C:\abc\
repository專案名稱為def.git
則對應到C:\abc\def\ 資料夾內
下載方式為

git clone https://github.com/username/def.git

這張用小畫家畫的概念圖對新手應該有非常大的幫助



剩的就靠全中文的教學網站
Documentation正體中文

2014年7月14日 星期一

準備不夠?做就是在準備了!


我朋友說想去學英文會話

希望能夠跑國外路線的業務

依照我所認識的他

英文會話能力並不算太差

至少溝通上應該不會有問題才是


我跟他說

語言能力沒有環境下不練習就會退化

何必去學會話能力

認真去跑國外業務會話能力不就能夠提升了嗎?

我們總是希望在別人能表現自己最優秀的一面

但事實上你要如何去達到完美

現在世界變化如此迅速

等你練習到完美時或許環境又改變了

現在這個世界需要的是目的為導向

我相信國外的客戶不會因為你語言能力強大就跟你下訂單

既然目的是國外客戶的業務

語言不過是溝通的工具

不需要達到完美

能夠明確的表達產品的功能即可

說一口流利的英文的確是有加分作用

但我想那在客戶願不願意下訂單的影響是非常小的

重要的還是在於產品的功能與價格以及業務誠不誠實



當然許多事情有不同的目的

特別是一次性決定勝負的項目

譬如考試、面試、表演

這時自然準備就重要了許多囉