In [1]:
a=1
In [2]:
type(a)
Out[2]:
In [3]:
b=3
In [4]:
type(b)
Out[4]:
兩整數相除,輸出結果為浮點數(float)。(備註:Python 3開始)
In [5]:
a/b
Out[5]:
In [6]:
type(a/b)
Out[6]:
在Python3,兩整數相除,需以//運算子來相除,方能真正用整數儲存該結果。
In [7]:
a//b
Out[7]:
In [8]:
type(a//b)
Out[8]:
兩整數相加,其輸出仍然為整數。
In [9]:
a+b
Out[9]:
In [10]:
type(a+b)
Out[10]:
Python不需宣告型別。一個數字將會被判別為整數(int)或浮點數(float),需看該數是否有小數點存在。
In [11]:
type(1)
Out[11]:
In [12]:
type(1.)
Out[12]:
In [13]:
type(1.E-5)
Out[13]:
In [14]:
mystr='Hello World!'
In [15]:
type(mystr)
Out[15]:
將該字串所有字變成大寫
In [16]:
mystr.upper()
Out[16]:
將該字串所有字變成小寫
In [17]:
mystr.upper().lower()
Out[17]:
取出該字串前三個字
In [18]:
mystr[0:3]
Out[18]:
檢查某字串片段是否存在於該字串
In [19]:
'Wor' in mystr
Out[19]:
In [20]:
'WOR' in mystr
Out[20]:
In [21]:
'WOR' in mystr.upper()
Out[21]:
以len()看字串長度
In [22]:
len(mystr)
Out[22]:
In [23]:
mystr=' hi '
清除左右空白
In [24]:
mystr.strip()
Out[24]:
清除左空白
In [25]:
mystr.lstrip()
Out[25]:
清除右空白
In [26]:
mystr.rstrip()
Out[26]:
置換字串內的h成f
In [27]:
mystr.replace('h','f')
Out[27]:
In [28]:
t=True #真
f=False #假
In [29]:
t==f #真等於假?
Out[29]:
In [30]:
t==t #真等於真?
Out[30]:
In [31]:
t!=f #真不等於假?
Out[31]:
In [32]:
t==f or t!=f #真等於假 或是 真不等於假?
Out[32]:
In [33]:
t==f and t!=f #真等於假 和 真不等於假?
Out[33]:
In [34]:
not t #非真?
Out[34]:
In [35]:
for j in range(5):
print(j)
以上,我們使用了range()這個內建函數,它到底是什麼?
In [36]:
r=range(5)
print( type(r) )
用type()檢查變數r的型別,我們發現了r=range(5)是屬於'range'這個類別的一個物件。
接下來,我們以內建函數hasattr()去檢查range(5)這個物件是不是可疊代(iterable):
首先以help()函數檢查一下hasattr()的用法:
In [37]:
help(hasattr)
In [38]:
hasattr(range(5), '__iter__')
Out[38]:
In [39]:
r=range(5).__iter__() # 取得range(5)的疊代器
print( r.__next__() ) # 進行疊代並印出
print( r.__next__() ) # 進行疊代並印出
print( r.__next__() ) # 進行疊代並印出
print( r.__next__() ) # 進行疊代並印出
print( r.__next__() ) # 進行疊代並印出
print( r.__next__() ) # 進行疊代並印出
In [40]:
i=0
while(i<5):
print(i)
i+=1 # i=i+1的簡寫
常用於不確定要跑幾次,要跑到直到條件滿足才跳出迴圈的情形。例如:嘗試擷取某網頁,直到失敗次數太多或是擷取成功為止。
In [41]:
array=[1,2,2,3,4,5] #建立一個清單
print(array)
print(array[0]) #印出清單內的第一個元素
print(array[-1]) #印出清單內最後一個元素
In [42]:
type([1,2,2,3,4,5]) #以type查看清單型別,確定清單(list)的型別就是list。
Out[42]:
In [43]:
hasattr([1,2,3,4,5],'__iter__') # 若是[1,2,3,4,5]為可疊代物件,那我們就可以用迴圈來疊代出清單內的所有元素。
Out[43]:
In [44]:
for j in [1,2,3,4,5]:
print(j,j**2)
In [45]:
for j in [1,2.,'字串',3,range(10),5,[1,1,1,2,2,2]]:
print(j,'\t',type(j),'\t',hasattr(j,'__iter__'))
從以上得知:
In [46]:
for j in 'Python':
print(j)
使用append()添加新元素至清單內
In [47]:
array=[1,2,3]
array.append(4)
print(array)
使用del 刪除清單內元素
In [48]:
print(array)
del array[2] #刪除清單內的第二個元素
print(array)
我們可使用len()去得知清單的長度
In [49]:
array=[10,20,30,40]
print(len(array))
使用enumerate()去列舉清單
In [50]:
enumerate(array)
Out[50]:
In [51]:
type(enumerate(array))
Out[51]:
In [52]:
hasattr(enumerate,'__iter__')
Out[52]:
In [53]:
for j in enumerate(array):
print(j)
In [54]:
print( type( (0,10) ) )
In [55]:
array=(1,2,3,"abc")
print(array)
In [56]:
del array[1]
In [57]:
array.append(5)
In [58]:
array[2]=0
結論:不可新增刪除覆蓋tuple內的元素,因此tuple可以被看做是唯讀的list。
list可以被取set()。
set的定義:集合內元素不允許重複,且集合內的元素無索引。
In [59]:
set([1,1,2,3,3,4,1,2,'alpha','beta'])
Out[59]:
In [60]:
type( {1, 2, 3, 4, 'beta', 'alpha'} )
Out[60]:
In [61]:
st={1,1,2,3,3,4,1,2,'alpha','beta'}
print(st)
print(hasattr(st,'__iter__'))
In [62]:
for j in st:
print(j)
In [63]:
print(st[0])
也就是先前說的,set內的元素並無索引。
將range(5)裡面的東西抓出來,放到一清單叫做lst,可有各種寫法:
第一種
In [64]:
lst=[]
for j in range(5):
lst.append(j)
print(lst)
第二種
In [65]:
lst=[j for j in range(5)] #此是非常Python的寫法(Pythonic way of coding)
print(lst)
第三種
In [66]:
lst=list(range(5))
print(lst)
第四種
In [67]:
lst=[*range(5)]
print(lst)
In [68]:
#法一:
lst=[]
for j in range(5):
#完成接下來的部分
In [69]:
#法二:
#提示: lst=[.....]
In [70]:
# 法一:
lst=[]
for j in range(5):
#完成接下來的部分
In [71]:
#法二:
#提示: lst=[.....]
In [72]:
x=5
if(x==1):
print('x is 1')
elif(x==2):
print('x is 2')
else:
print('x is neither 1 nor 2.')
法一
In [73]:
for j in range(10):
if(j%2==0):
print(j)
法二
In [74]:
[j for j in range(10) if j%2==0]
Out[74]:
In [75]:
for j in range(5):
print(j)
if(j==2):
break #中斷,跳出迴圈
In [76]:
for j in range(5):
if(j==2):
continue #略過以下程式碼,並繼續疊代至下一個元素
print(j)
In [77]:
#提示:使用for, range(),print()
for i in range(1,4):
#完成接下來的部分
In [78]:
#提示:使用for, range(),print(),以及建立一個清單(list)
#完成接下來的部分
In [79]:
def square(x):
print(x*x)
In [80]:
def square_return(x):
return(x**2)
square(x)將只會印出x, 而square_return(x)將會回傳x。
In [81]:
square(2)
In [82]:
square_return(2)
Out[82]:
可另一變數res接收square_return(x)回傳的值。
In [83]:
res=square_return(2)
In [84]:
print(res)
需注意的是,square(x)並不會回傳值,因此res將接收到None(無)。
In [85]:
res=square(2)
In [86]:
print(res)
In [87]:
def add(a,b):
return a+b
In [88]:
addResult=add(5,7)
print(addResult)
In [89]:
%%file testSquare.java
public class testSquare{
public static void main(String args[]){
int y=square(2);
System.out.println(y);
}
static int square(int x){
return x*x;
}
}
In [90]:
!javac testSquare.java
!java testSquare
In [91]:
# 修改以下程式碼,以完成函數factorial(n)
def factorial(n):
if(n==0):
return ???
if(n!=0):
return ???
一般函數寫法
In [92]:
def f(x,y):
return x+y
In [93]:
f(1,2)
Out[93]:
使用匿名函數,並將匿名函數給予名稱f。此方法得到的函數等同於上述使用一般函數寫法的結果。
In [94]:
f=lambda x,y:x+y
In [95]:
f(1,2)
Out[95]:
將匿名函數直接拿來使用,不給名稱,用完就丟。
In [96]:
(lambda x,y:x+y)(1,2) # 1+2=3
Out[96]:
In [97]:
(lambda x:x*x)(7) # 7X7=49
Out[97]:
範例:提款機
In [98]:
class Customer(object):
def __init__(self, name, balance=0.0):
self.name=name #當物件被新建立,姓名以及餘額兩個屬性將被初始化
self.balance=balance
def withdraw(self, amount): #提款
if amount > self.balance: #若要提取大於帳戶餘額的數目,將提出錯誤訊息
raise RuntimeError('Amount greater than available balance.')
self.balance -= amount
return self.balance
def deposit(self, amount): #存款
self.balance += amount
return self.balance
In [99]:
a=Customer("Bill",100)
a.withdraw(70)
Out[99]:
In [100]:
a.deposit(60)
Out[100]:
In [101]:
a.withdraw(100)
此套件用於建立數值陣列和做數值運算。
In [102]:
import numpy as np
內建常數$\pi$
In [103]:
np.pi
Out[103]:
計算根號$\pi$
In [104]:
np.sqrt(np.pi)
Out[104]:
用np.arange(n)建立一序列內容為[0 1 2 .....n-1]
In [105]:
np.arange(10)
Out[105]:
用np.linspace(0,2.*np.pi,10)建立一個一維線性空間。起始為0,終點為 $\pi$ ,共10個點。
In [106]:
np.linspace(0,2.*np.pi,10)
Out[106]:
將數列內所有數值+100
In [107]:
np.arange(10)+100
Out[107]:
將數列內所有數值取平方
In [108]:
np.arange(10)**2
Out[108]:
以np.mean()計算出算數平均
In [109]:
np.mean( np.arange(10) )
Out[109]:
以np.std()計算出標準差
In [110]:
np.std( np.arange(10) )
Out[110]:
檢驗Numpy序列和Python清單效能差異
In [111]:
a=np.random.normal(0,1,100000) # 100000個常態分佈亂數
b=np.random.normal(0,1,100000) # 100000個常態分佈亂數
list_a=list(a)
list_b=list(b)
In [112]:
%%timeit
res=a+b
In [113]:
%%timeit
res=[]
for j in range(len(list_a)):
res.append(list_a[j]+list_b[j])
NumPy較快,因
建立一矩陣
In [114]:
A=np.array([[1,2,3],[4,5,6],[7,8,9]])
In [115]:
A
Out[115]:
將$A$轉置 ($A^{T}$)
In [116]:
A.T
Out[116]:
$A\cdot A^{T}$
In [117]:
A.dot(A.T)
Out[117]:
截取片段:清單方式:以A [index0][index1] 取出二維陣列$A$的部分片段。
In [118]:
A[0]
Out[118]:
In [119]:
A[1:3]
Out[119]:
In [120]:
A[1:3]
Out[120]:
In [121]:
A[:][1:3]
Out[121]:
截取片段:矩陣方式:以A [index0,index1] 取出二維陣列$A$的部分片段。(index0方向:垂直,index1方向:水平)
In [122]:
A
Out[122]:
In [123]:
A[1:3,:]
Out[123]:
In [124]:
A[:,1:3]
Out[124]:
檢查一下A的形狀
In [125]:
A.shape
Out[125]:
以條件找尋A裡面符合條件的數值
In [126]:
A>5
Out[126]:
In [127]:
A[A>5]
Out[127]:
In [ ]:
A=np.array([[1,2,3],[4,5,6],[7,8,9]])
In [ ]:
def f(A)
# 完成此函數
return ???