PYTHON程式語言的學習-7: 定義函數和輸入模組

在這個講次當中我們學習如何使用函數副程式。
函數是程式中完成一定功能的一段獨立程式碼,可供程式中的其他程式呼叫。該段獨立程式需要有一個名稱以供呼叫,也可接受呼叫者傳遞的參數,使處理更加靈活。函數執行後可以有傳回值,返還呼叫者。通俗的說,函數是一種程式元件事組成大程式的小程式。為什麼要使用函數?



利用函數副程式計算n!


一個簡單的函數副程式用法def。在下面這個程式當中我們把n!的連乘計算,寫成一個函數程式,再來呼叫使用它。並且我們在函數程式中也定義的0!=1。

利用函數副程式計算n!



def facto(n):
    if(n==0): return 1
    s=1
    for i in range(1,n+1):
        s *= i
    return s

for i in range(11):
    s=facto(i)
    print i,s


0 1
1 1
2 2
3 6
4 24
5 120
6 720
7 5040
8 40320
9 362880
10 3628800





sin(x)級數展開


範例: 正弦函數(\(\sin(x)\))的級數定義:
\( \sin(x)=x-\frac{x^3}{3!}+\frac{x^5}{5!}-\frac{x^7}{7!}+\frac{x^9}{9!}+\cdots=\sum_{n=0}^{\infty}\frac{(-1)^n x^{2n+1}}{(2n+1)!} \)
利用函數程式facto計算n!再按公式做級數求和,最後與數學涵數庫的\(\sin(x)\)比較。


sin(x)級數展開



import math

def facto(n):
    if(n==0): return 1
    s=1
    for i in range(1,n+1):
        s *= i
    return s

N=5
sum=0.
x=math.pi/4.
for n in range(N+1):
    sum += (-1.)**n/facto(2*n+1)*x**(2*n+1)
    print n,sum
print x,math.sin(x),sum


0 0.785398163397
1 0.704652651209
2 0.707143045779
3 0.707106469575
4 0.707106782937
5 0.70710678118
0.785398163397 0.707106781187 0.70710678118




數學函數:


在這個程式當中我們將經常使用的數學函數呼叫進來做示範。

數學函數(import math)



###### 呼叫數學函數模組及其應用                                                 
import math	#呼叫數學函數模組                                                   
pi=math.pi	#圓周率                                                              
print 'pi=',pi                                                                  
x=pi/3.                                                                         
deg=math.degrees(x)	#將弧度轉為角度                                             
print 'x=',x,'  degree of x=',deg                                               
print 'sin(x)=',math.sin(x) 	#三角函數                                          
print 'cos(x)=',math.cos(x)                                                     
print 'tan(x)=',math.tan(x)                                                     
                                                                                
deg2=45.                                                                        
rad2=math.radians(deg2) 	#將角度轉為弧度                                        
print 'deg2=',deg2,'  rad2=',rad2                                               
y=math.atan(rad2) 		#反三角函數                                                 
print 'atan(rad2)=',y                                                           
                                                                                
x=1.                                                                            
print 'x=',x,'  自然指數exp(x)=',math.exp(x),'  exp(2)=',math.exp(2.)           
z=10.                                                                           
print 'z=',z,'  自然對數log(z)=',math.log(10.)                                  
print '常用對數log10(z)=',math.log10(10.),'  log10(12345.)=',math.log10(12345.) 
print '開平方根math.sqrt(100.)=',math.sqrt(100.),'math.sqrt(2.)=',math.sqrt(2.) 
                                                                                
x=-10.                                                                          
print '絕對值:x,math.fabs(x)=',x,math.fabs(x)


pi= 3.14159265359
x= 1.0471975512   degree of x= 60.0
sin(x)= 0.866025403784
cos(x)= 0.5
tan(x)= 1.73205080757
deg2= 45.0   rad2= 0.785398163397
atan(rad2)= 0.665773750028
x= 1.0   自然指數exp(x)= 2.71828182846   exp(2)= 7.38905609893
z= 10.0   自然對數log(z)= 2.30258509299
常用對數log10(z)= 1.0   log10(12345.)= 4.09149109427
開平方根math.sqrt(100.)= 10.0 math.sqrt(2.)= 1.41421356237
絕對值:x,math.fabs(x)= -10.0 10.0




亂數函數


在下面的程式中我們示範如何呼叫亂數函數並且做適當的應用。利用random.seed(整數)來設定一個亂數的初始值,這樣可以使我們每次做這個亂數的應用的時候可以取出相同的一組亂數,不會隨著時間的不同而取用不同的亂數,這樣能夠方便我們檢驗我們的程式。random.random()會傳給我們一個介於0與1之間的任意浮點數。

亂數函數



import random
random.seed(1234)
for i in range(10):
    r=random.random()
    print ('%8d %8.3f %3d' %(i,r,int(r*10)))


       0    0.966   9
       1    0.441   4
       2    0.007   0
       3    0.911   9
       4    0.939   9
       5    0.582   5
       6    0.672   6
       7    0.084   0
       8    0.766   7
       9    0.237   2