Welcome to another Level

「Python」


BZ @ NISRA / WECO

SELF INTRODUCTION



楊皓文  ==  BZ


你最有可能遇到我的地方:
梅興老師的課程



現在你會哪些語言了?

java? 

PHP? 

HTML?

Scripting Language


JavaScript

Ruby

Python

SO, Today our theme is 'python'



今天這堂課只是介紹和引進門,
會不會深入使用這個語言則是看各位的緣份。

今天過後如果你對Python有了興趣,
可以大大小小的東西都改用Python寫;

也或者你覺得Python不適合你,
至少你也能瞭解Python是什麼。

WHAT IS PYTHON?


  • Python is an open source scripting language.
  • Developed by Guido van Rossum in 1990s.
  • Named after Monty Python. (一個英國六人團體)
  • Has two stable versions, Python 2.7 and Python 3.3

WHY Python?


易讀

開發快速

使用簡單

OOD物件導向設計

跨平台


WHEN Python?


Anytime.

從小工具,
到大程式!

Where?


Anywhere. (XD)

Web Application
Network Programing
Game and 3D Graphics

也是Google常用的腳本語言
(例如: Google App Engine)




ready to python?



準備環境



Ubuntu、Mac OSX內建

Windows自行至官方網站安裝
http://www.python.org/getit/



(今天請先安裝2.7.5版)


設定環境變數


和你以前設定Java一樣:
  1. 打開 系統內容
  2. 選擇 進階系統設定
  3. 切換到 進階 分頁
  4. 按下 環境變數
  5. Path 中新增 C:/python27 (或其他安裝目錄)


設定環境變數


確定可以在命令提示字元中執行!

HOW to run python?



兩種方式

interpreter 命令列直譯
>> python

執行 .py檔案
>> python test.py

TIME TO HELLO WORLD



變數宣告 宣告函式(function) 呼叫內建的print函式 利用tab空白來分段 回到原本的排版結束宣告 呼叫剛剛建立的say_hello 並傳入參數'NISRA'字串
name = 'BZ' def say_hello( where ):    print 'Hello' , name + '@' + where + '!' say_hello( 'NISRA' )
Output: 
>>> say_hello('NISRA') hello BZ@NISRA! 

BASIC GRAMMAR


  • 建立變數
  • 註解
  • 狀態控制
  • 容器

VARIABLE


不用定義型別
句尾不用分號;
可以改變型別(弱型別 Weak Type)
 n = 0 f = 9.99 str = '一串字串' fruit = 'apple' fruit = 0

comments


單行註解

不是用//,用#
#print '我被註解了O_Q'print '我沒被註解!'#print '我又被註解了Q_Q'

COMMENTS


多行註解

用'''包住要註解的東西
 n=9 m=10 ''' print '從這行開始' n=0 m=1 print '一直到這邊' ''' print n, m
Output:
 9 10

Control flow




if
else
elif
while
for


IF, ELSE, ELIF, while


和大家熟悉的if else while一樣
用冒號和排版取代{ }
if  <CONDITION>:
    #做某些事elif <ANOTHER CONDITION>:    #做其他事
else:    #做剩下的事
while <CONDITION>: #一直做某些事

LOGIC condition

True 、False
not、and、or 
is、in
==、!=、>、<.....

>>> 2 < 1
False 
>>> 'abc' is not 'qoo'
True 
>>> 'a' in 'apple'
True 
>>> "a" is 'a'
True 

indentation

Python利用縮排分區塊

你可以
if True:
    print 'hello'^^^^四個空格
或者是
if True:
	print 'hello'
(^T )一個TAB

但是絕對不要Tab和空白混合使用!

FOR statement



利用range()來建立範圍
for i in range(10):
    print i,                                   #拿掉,會變成換行
Output:
 0 1 2 3 4 5 6 7 8 9 10
試著改成
range(1,10)
range(1,20,2)

FOR sTatement




和其他語言的foreach用法也一樣
 for c in 'hello':
     print c
for fruit in ['apple','melon','banana']: print fruit

LITTLE TEST


c = 0if True:    while c<20:        for x in range(40):            if x<22:                c = x                print x,
單純在for迴圈跑了40次
c被加到21
出來for迴圈後就因為不滿足while條件跳出了...
 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

DATA structure


Python之中沒有所謂的「Array」
取而代之的是以下更強大的容器們

String
Tuple
List
Dictionary

String

你我都認識的字串
 str = "Hello, I'm a STRING" len(str)                                            #length of str

可以透過Slice做處理

取得第五個字元
>>> str[4]'e'
子字串
>>> str[7:10]"I'm"

STRING (SLICE)

試試看以下的結果

c = "12345678910Thanks"

c[-1]
c[-6:-1]
c[11:]
c[:9]
c[0:11:2]
c[::-1]

STRING (SLICE)

結果:
>>> c[-1]  往回數's'
>>> c[-6:-1]  一樣是往回數,從第-6到第-1個
'Thank'
>>> c[11:]    第11之後的所有項目(字)
'Thanks'
>>> c[:9]     第9之前的所有項目(字)
'123456789'
>>> c[0:11:2] 從0到11之間,「間隔2」的所有項目
'135790'
>>> c[::-1]   所有字串倒著取回來
'sknahT01987654321'

LIST

類似Java:ArrayList
可自由新增刪除內容
無限制內容型別

count_list = [1,2,3,4,5,6,7,8,9,10,'謝謝大家,請坐。']

>>>count_list[0]
1 

一樣可以進行slice的動作
>>>count_list[:10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

LIST


list.append('a') 
在list最後面新增'a'
#等同於 list[len(list)]='a'

list.count('a')
算'a'在list裡的出現次數

list.remove('a')
刪除list之中的第一個'a'


還有.sort()、.pop()、.index(i)等等...參考網址

Built-in functions

Python已經內建許多好用的函式了

sorted() : 排序 (文字也可)
>>> li=[8,1,9,10,60,14,5,6]
>>> print sorted(li) [1, 5, 6, 8, 9, 10, 14, 60]
sum() : 加總合
>>> print sum(li)113
max() : 取最大值
>>> print max(li)60

Module - import


輪子一直都不用重新發明
可以透過import載入其它模組

常見常用有:
os (系統相關功能)
time (時間相關功能)
re (RegEx, 正規表示式)

...更多更多

MODULE - MORE

Python也有工具方便你安裝、管理模組
就像是Ubuntu中的apt-get一樣

(只是這兩個通常得自己安裝)

easy_install
PIP

例如,用PIP安裝PIL(影像處理套件)
#pip install PIL

Today's boss



我想寫網頁遊戲外掛!!


>>>連到網頁伺服器抓資料
urllib2

urllib2


URL LIBRARY 2 
負責用來開啟網頁的函式庫






詳細API介紹

HOW to use?

  1. 首先,先import他
  2. import urllib2
  3. 建立一個變數response,並且開啟目標網址
  4. response = urllib2.urlopen('http://python.org/') 
  5. 從回應中讀出網頁原始碼
  6. html_src = response.read() 
  7. 把它print出來,或是做一些處理


天啊怎麼那麼簡單!?

LAB



你需要登入
http://bz.weco.net:1337/

每次進去,上面都會產生一組密碼
但這密碼只有在1秒內有效

請在1秒內輸入密碼,登入系統!


#提示 : 看一下抓到的原始碼
並做些字串處理,可以試試看.find('字串')

LAB - SAMPLE SOLUTION


讀入模組 輸入網址 開啟連結 讀取原始碼 找到密碼在原始碼中的位置 用slice取得原始碼中的密碼 密碼是用get方式輸入回傳 所以一樣透過網址+參數 印出結果
import urllib2 url = 'http://bz.weco.net:1337/' res = urllib2.urlopen(url) html_src = res.read() pw_start = html_src.find('<password>')+10 pw_end = html_src.find('</password>') pw = html_src[pw_start:pw_end] login = urllib2.urlopen(url+'?pw='+pw) answer = login.read() print answer

sikuli


以Python為腳本語言的按鍵精靈

next week



如果你覺得這週的Python課程讓你沒興趣?

下週
哈比學長教你用Python做更多(壞)事



如果我真的覺得我和Python的八字合不來呢?

你可以先試試看提到的另外兩位:

Ruby 
閃亮亮的紅寶石

JavaScript 
從前端到後端快要統一世界的大魔王





語言/技術那麼多

只要你願意多接觸、多玩

你總會找到你最喜歡的語言




Q&A

Welcome to another Level「Python」

By BZ

Welcome to another Level「Python」

@NISRA

  • 1,295