PYTHON程式語言的學習

在下面的內容中,我們將以程式來做為學習的導向。

1. 縮排,語句,註解和控制流


必須使用4個空格來表示每級縮排(if, else, while, for, def)。
1. if語句,當條件成立時執行語句塊。經常與else, elif(相當於else if)配合使用。
2. for語句,遍列列表、字串、字典、集合等疊代器,依次處理疊代器中的每個元素。
3. while語句,當條件為真時,循環執行語句塊。
4. def語句。用於定義函式和類型的方法。
4. pass語句。表示此行為空,不執行任何操作。
5. import語句。匯入一個模組或包。常用寫法:
   from module import name, 
   import module as name, 
   from module import name as anothername
6. 使用#和 '''.........'''作程式註解

#----------------------- if else
x=55
if(x < 60):
    print 'student grade=',x,'  Fail'
    if(x > 50):
        print 'You can have another test.'
    else:
        print 'You cannot take another test.'
else:
    print 'student grade=',x,'  Pass'
    
'''
以下是內容是註解,不會被編譯。
利用for迴圈進行連續求和。
'''
#----------------------- for
sum=0
for i in range(5):
    sum=sum+i
    print i, sum

#------------------------while
x=0
while x < 5:
    x +=1
    print x

#------------------------def
def max(a,b):
    if(a > b):
        return a
    else:
        return b
x=max(3,8)
print 'max=',x

#-----------------------import math, random, visual, visual.graph
import math
print 'pi=',math.pi
x=math.pi/6.
print 'x=',x,'  sin(x)=',math.sin(x)

#---------------------random
import random
for i in range(5):
    r=random.random()
    print 'random r=',r
#------------------------random.seed
for i in range(5):
    random.seed(123)
    print 'with seed, random r=',random.random()
#---------- how to use Vpython sphere object
from visual import *
scene = display(width=800, height=800, center=(5, 0, 0),
                background=(0.5,0.5,0), forward=(0,0,-1))               
Nball=12
balls=[sphere(radius=0.5, pos=(i,0,0), color=(0.1*i,1-0.1*i,0)) for i in range(Nball)]
'''------a simple example of plotting a graph with Vpython'''
from visual.graph import *
gd = gdisplay(width=300, height=300)
funct1 = gcurve(gdisplay=gd, color=color.blue)
funct2 = gcurve(gdisplay=gd, color=color.red)
for t in arange(0,10,0.1):
    funct1.plot( pos=(t, sin(t)) )
    funct2.plot( pos=(t, cos(t)) )



2. 資料類別:


1. 整數(int)
2. 浮點數(float)
3. 複數(complex)
4. 字串(string)
5. 清單(list)
6. 元組(tuple)
2.1 1整數(int), 浮點數(float),複數(complex),布林(boo)類型資料

i=123
x=123.456
z=2.+3.j
print i,x,z
print type(i),type(x),type(z),abs(z)  #整數(int);浮點數(float);複數(complex)
#關係運算式: >, <, >=, <=, ==, !=
b=(1 == 2)
print b, type(b)
c=(1 != 2)
print c, type(c)  #布林類型資料只有兩個真(True)和假(False)

#邏輯運算 and, or, not
L=(1 < 2) and (2 < 3)
M=(1 < 2) and (3 < 2)
N=(1 < 2) or (3 < 2)
O=(1 < 2) and not (3 < 2)
print 'L=',L,' M=',M, ' N=',N, ' O=',O



2.2 清單與元組

#清單與元組之資料形態
L=['YC','Chen',165.,64.,20,['music', 'basketball']]
T=((1,1),(2,2),(3,3),(4,4))
#用len()這個指令可以考查清單和元組的長度
#用type()這個指令可以考查變數的形態:清單和元組
print len(L),' type(L)=',type(L),'  L=',L
for i in range(len(L)):
    print i, L[i]

print len(T),' type(T)=',type(T),'  T=',T
for i in range(len(T)):
    print i, T[i]

#清單的元素定義之後仍能隨意修改
L[2]=164.
L[3]=72.
L[4]=55
L[5][0]='pray'
L[5][1]='swimming'
print 'after many years, L=',L

#元組的元素一經定義之後就不能夠再修改,所以下面這個敘述在編譯的時候會有錯誤的信息
T(0)=(1,2)
print T



3. 運算式


主要的算術運算子與C/C++類別似。+, -, *, /, //, **, ~, %分別表示加法或者取正、減法或者取負、乘法、除法、整除、乘方、取補、取模。, &, |, 表示二進位的AND, OR運算。 , <, ==, !=, =, >=用於比較兩個運算式的值,分別表示大於、小於、等於、不等於、小於等於、大於等於。在這些運算子裡面,~, |, ^, &, ,>必須應用於整數。
Python使用and, or, not表示邏輯運算。
is, is not用於比較兩個變數是否是同一個物件。in, not in用於判斷一個物件是否屬於另外一個物件。
3.1 中文編碼
如果需要讓電腦知道我們將會使用中文字,我們可以加入中文編碼的資訊。第一行表示使用 utf-8 編碼,第二行表示使用 Big5 編碼。

#-*- coding: utf-8 -*-   #-*- coding: cp950 -*-  total = 1 + 1 print " 一加一等於", total #總和



3.2 除法的商數與餘數
在程式語言中,%就不是百分比的意思,而是餘數。

#-*- coding: utf-8 -*-   #使用 utf-8 編碼 #-*- coding: cp950 -*-  #使用 Big5 編碼(windows 下使用) a = 12 b = 3 c = a / b d = a % b print "a = ", a, " and b =", b print "a / b 的商數 = ", c # 商數 print "a / b 的餘數= ", d,"(若為0,表示可整除)"



3.3 符點數運算
以下的例子,我們需要Python中math資料庫的支援。在程式碼的開頭,我們加入import math,讓電腦知道math裡面的內建函數即將會被使用。
#-*- coding: utf-8 -*-   
#使用 utf-8 編碼
#-*- coding: cp950 -*- 
#使用 Big5 編碼(windows 下使用) 
import math
a = 1.1
print a, " 無條件進位 =", math.ceil(a) 
print a, " 無條件捨去 =",  math.floor(a)
print a, " 四捨五入 =", round(a)
print "=========="
a = 1.9
print a, " 無條件進位 =", math.ceil(a) 
print a, " 無條件捨去 =",  math.floor(a)
print a, " 四捨五入 =", round(a)



3.4 次方與指數
在日常生活中,經常會需要平方與立方的計算。假設是正方形的邊長,則此正方形的面積 =\(邊長^2\) 。假設是球的平徑,則此球的體積 =\(\frac{4\pi}{3}半徑^3\) 。在Python中,次方的運算用的符號是 ** (請注意,一般程式語言像C++的次方運算符號是^)。另一個方式是用內建的 math.pow()。
#使用 utf-8 編碼
#-*- coding: cp950 -*- 
#使用 Big5 編碼(windows 下使用) 
import math
print "5 的平方 = 5 ** 2 = ", 5**2
print  "5 的平方 = math.pow(5,2) = ", math.pow(5,2)
print "5 的平方根 = 5 ** (0.5) = ", 5**(0.5)
print  "5 的平方根 = math.pow(5,0.5) = ", math.pow(5,0.5)



4. 序列分列表(list)和元組(tuple)


Python序列區分列表(list)和元組(tuple)兩種類型。list的寫法是[1,2,3],而tuple的寫法是(1,2,3)。可以改變list中的元素,而不能改變tuple。在某些情況下,tuple的括弧可以省略。tuple對於賦值語句有特殊的處理。因此,可以同時賦值給多個變數,比如:
x, y=1, 2 #x=1, y=2
特別地,可以使用以下這種形式來交換兩個變數的值:
x, y = y, x #最後結果:y=1, x=2

4.1 列表(也稱清單)list

square=[1, 4, 8, 16]
L1=len(square)
print 'L1=',L1, square
square=square+[25, 36,49]
L2=len(square)
print 'L2=',L2, square
square[2]=9
print square
letter=['a', 'b', 'c', 'd', 'e']
print letter
letter[2:3]=['C', 'D']
print letter
letter[:]=[]
print letter

#也可以嵌套多層 list (建立 list 包含其他 list),例如:
a = ['a', 'b', 'c']
n = [1, 2, 3]
x = [a, n]
print x
print x[0],x[1]
print x[0][1], x[0][2]

# use for and append to place data into list
y=[]
for i in range(10):
    y.append(2*i)
print 'y=',y



4.2 元組(tuple)
元組中的元素值是不允許修改的,但可以對元組進行連接組合,如下例:
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# 再次強調:以下修改元組元素的操作是非法的。
#tup1[0] = 100
tup3 = tup1 + tup2  #將兩元組連結
print 'tup1=',tup1
print 'tup2=',tup2
print 'tup3=',tup3

5. 字串


Python使用'(單引號)和"(雙引號)來表示字串。一般地,如果字串中出現了雙引號,就使用單引號來表示字串;反之則使用雙引號。如果都沒有出現,就依個人喜好選擇。出現在字串中的\(反斜槓)被直譯為特殊字元,比如\n表示換行符。運算式前加r指示Python不直譯字串中出現的\。這種寫法通常用於編寫正規表示式或者Windows檔案路徑。
5.1 字串1
a='Chen Lee Lin'
for i in a:
    print i
b=['Chen', 'Lee', 'Lin']
for i in b:
    print 'family name:',i



5.2 字串連結與複製1
s1='Tunghai'
s3=s1*3
print 's1=',s1
print 's3=',s3
s2='Univarsity'
print s1+' '+s2
print 's2[2:8]=',s2[2:8]
print 'Physiks'[2:6]
s2[4:5]='i'
print 's2=',s2



5.3 字串連結2
prefix='py-'
for i in range(7,12):
    if(i < 10):
        b=prefix+'0'+str(i)
    else:
        b=prefix+str(i)
    print b
#請比較下面三個字串連結的方式所造成的差別
s1 = ('This is'
     'python code'
     'for CP')
print 's1=',s1
s2="""This is
python code
for CP"""
print 's2=',s2
s3='This is \
python code \
for CP'
print 's3=',s3



5.4 字串, for迴圈, 邏輯判斷
c=input("input a string:\n")
num='0123456789'
err=False
for i in c:
    if i not in num:
        err=True
if err:
    print('該字串包含非數字字元')
else:
    print('該字串包全是數字字元')