20150929 [KUASITC] Python社課筆記(1)
[ 筆記內容 ] 簡易計算機
  • (一)基本概念
  • 1.  程式變數的型態
  • 2.  程式流程的控制
  • (二)課堂上的題目
  • STEP_1 : 計算平均值
  • STEP_2 : 利用平均值來計算標準差 
  • STEP_3 : 把使用者輸入的資料變成 list
  • STEP_4 : 計算結果後輸出
 
 
[ 範例程式 ] GitHub
 
 

(一)基本概念

1.  程式變數的型態
  • 數字型態 : intfloat
  • 字串型態 : String
  • 陣列型態 : List
  • 內建字典型態 : Dict
 
  • [ 範例 ] 型態的差異
# lesson_1_(1).py
a = 1    # type of a is "int"
print(type(a))
 
b = 2.0    # type of b is "float"
print(type(b))
 
c = '3'    # type of c is "str"(String)
print(type(c))
 
# list
d = range(10)    # type of d is "range"(List)
print(d)
print(type(d))
    
 
  • < 輸出結果 >
 
  • [ 補充 ] 計算 list (陣列) 長度的方法
  • 使用 "len()"
# 使用範例
'''
array = [ 'one', 'two', 'three' ]
print( len( array ) )    # array陣列的長度為"3"
'''
 
 
2.  程式流程的控制
  • 判斷 : Ifelifelse
  • 迴圈 : ForLoop
  • 副程式 : Function
 
  • [ 範例 ] 使用 If、elif、else 
# lesson_1_(2).py
a = 0
result = ''        
 
#-------判斷區域-------
if a == 0:
    result = ' a is zero !'    # 因為"a"是"0",所以會顯示這一行
elif a == 1:
    result = ' a is one !'
else:
    result = ' a is not 0 or 1 !'
#--------簡寫法-------------
'''     
# 連續三個單引號用在多行註解
a = 0
b = 'a is zero' if a == 0 else 'a is not zero'
'''
#---------------------
print( result )
 
 
  • < 輸出結果 >
 
  • [ 範例 ] 使用 for、while
# lesson_1_(3).py
#----- for 迴圈 -----
for i in range( 5 ):
    print( i )
#----- while 迴圈 -----
i = 0        
while i < 5:
    print( i )
    i = i + 1
    
 
  • < 輸出結果 >
 
  • [ 補充 ] 使用 for 迴圈 -- 小技巧
# 使用範例
'''
animals = [ '小貓', '小雞', '小狗' ]
for little_animal in animals:
    print( little_animal )
'''
 
  • [ 補充 ] 使用 Function 
 
 
 
 

(二)課堂上的題目

STEP_1 : 計算平均值
  • 將每個輸入的數字相加後再相除
# lesson_1_STEP_1.py
# STEP_1:計算平均值
# 我們在這裡以取得1~5數字的平均值為例:
 
#------------STEP_1:計算平均值(副程式START)------------
def calc_mean( numbers ):        # 取得平均值
        count_m = float( len(numbers) )    # "len()":計算陣列的元素數量
        total_m = 0
        for number in numbers:
                total_m = total_m + number
        mean = total_m/count_m
        return mean
#---------------END_STEP_1(副程式END)----------------
 
print( calc_mean( [1, 2, 3, 4, 5]) )        # 輸出計算結果
 
 
  • < 輸出結果 >
 
 
STEP_2 : 利用平均值來計算標準差 
  • 用平均值來計算標準差,把要做的事情分成三個步驟來看
  1. 把每個數值平均值相減差值平方並累加
  1. 累加的差值平方總和 除以 輸入的數字數量
  1. 將結果開平方根
 
[ 範例 ] 取得數字 1 ~ 5 的標準差
  • < 步驟化版 >
# lesson_1_STEP_2.py
# STEP_2:計算標準差
# 我們在這裡以取得1~5數字的標準差為例:
 
#----<全域變數區域>----
mean = 0        # 平均值
add = 0                # 差值平方的累加
total = 0        # 差值平方總和除以數字數量
squart = 0        # 開根號後的結果
#------------計算平均值START------------
def calc_mean( numbers ):        # 取得平均值
        global mean
        count_m = float( len(numbers) )
        total_m = 0
        for number in numbers:
                total_m = total_m + number
 
        mean = total_m/count_m
        return mean
#---------------END----------------
 
 
#------------STEP_2:計算標準差---------------
# 利用平均值來計算標準差
# (1)把每個數值和平均值相減,差值平方並累加
def calc_add( numbers ):
        global add    # 引用全域變數
        global mean
        for number in numbers:
                add = add + (number - mean)**2
        return add
# (2)把累加的差值平方總和除以輸入的數字數量
def calc_total( numbers ):
        global total
        total = add/float(len(numbers))
        return total
# (3)將結果開根號
def calc_squart():
        global squart
        squart = total**(0.5)
        return squart
#---------------END_STEP_2----------------
calc_mean( [1, 2, 3, 4, 5] )
calc_add( [1, 2, 3, 4, 5] )
calc_total( [1, 2, 3, 4, 5] )
print(calc_squart())    # 輸出計算結果
 
  • < 精簡化版 >
# lesson_1_STEP_2_2.py
# STEP_2:計算標準差
# 我們在這裡以取得1~5數字的標準差為例:
 
#------------STEP_2:計算標準差---------------
def calc_STEP_2( numbers ):
        total_m = 0
        add = 0
        count = float( len(numbers) )        # 取得陣列元素的數量
 
# (1)算出平均值
        for number in numbers:        
                total_m = total_m + number
        mean = total_m / count
 
# (2)把每個數值和平均值相減,差值平方並累加
        for number in numbers:        
                add = add + (number - mean)**2
 
# (3)把累加的差值平方總和除以輸入的數字數量
        total = add / count        
 
# (4)將結果開根號        
        squart = total**(0.5)        
        return squart
#---------------END_STEP_2----------------
print(calc_STEP_2( [1, 2, 3, 4, 5]) )    # 輸出計算結果
 
 
  • < 輸出結果 >
 
 
STEP_3 : 把使用者輸入的資料變成 list
(1) sys.argv
  • sys.argv 是一個 list(陣列)
  • sys.argv[ 0 ] 可以取到 程式 的名字
  • sys.argv[ 1 ] 可以取到第  1  個參數
  • sys.argv[ 2 ] 可以取到第 2 個參數
 
(2) list.append
# lesson_1_STEP_3_1.py
array = [ 'Come with me' ]
print( array )
array.append( 'Hey !' )
print( array )
 
  • < 輸出結果 >
 
(3) range( number )
  • [ 用法 ] 以元素為基準
  • range( 開始, 結束, 間隔 )
  
  • [ 範例 ] 
# lesson_1_STEP_3_2.py
a = list( range( 5 ) )    # a = [0, 1, 2, 3, 4]    
# 從"0"開始顯示,到"5"就會結束,所以顯示到"4"
 
b = list( range( 2, 7 ) )    # b = [2, 3, 4, 5, 6]    
# 從"2"開始,到"7"就會結束,所以顯示到"6"
 
c = list( range( 0, 10, 2 ) )    # c = [0, 2, 4, 6, 8]
# 從"0"開始,到"10"就會結束,而且間隔為"2" (所以會顯示"0","2","4","6","8")
 
print(a)
print(b)
print(c)
 
 
  • < 輸出結果 >
 
 
STEP_4 : 計算結果後輸出 (待補充)
[ 範例 ] 提供使用者輸入數字,計算標準差
# lesson_STEP_4.py
# STEP_4:計算結果後輸出
# 提供使用者輸入數字的功能;如果沒有輸入數字,就會顯示:Please input numbers
 
import sys                # 匯入"sys"模組(載入命令列)
 
#------------(副程式)計算標準差---------------
def calc_STEP_2(numbers):
        total_m = 0
        add = 0
        count = float(len(numbers))        # 取得陣列元素的數量
 
        for number in numbers:                # (1)算出平均值
                total_m = total_m + float(number)
        mean = total_m / count
 
        for number in numbers:                # (2)把每個數值和平均值相減,差值平方並累加
                add = add + (float(number) - mean) ** 2
 
        total = add / count                        # (3)把累加的差值平方總和除以輸入的數字數量
        
        squart = total ** (0.5)                # (4)將結果開根號
        return squart
#---------------END_STEP_2----------------
 
#------------(主程式)處理命令列參數---------------
# 先判斷sys.argv[]是否有參數? (要排除"sys.argv[0]")
# 如果有,將該參數附加存入陣列內
array = list()
lenth = int(len(sys.argv))    # 判斷"sys.argv"的長度
# for 迴圈是以"tab"為縮排,
# 縮排內都是它的執行範圍
if lenth >= 2:
        for argv in sys.argv[1:]:        # 從"sys.argv[1]"開始
                array.append(argv)       # 有'Tab'縮排(迴圈範圍)
        print(calc_STEP_2(array))        # 執行副程式    # 無'Tab'縮排(非迴圈範圍)
 
else:
        print('Please input numbers')
#------------------------END-------------------------
 
 
< 輸出結果 >