5. 浮點數 (二)
5
0.25 + 0.25 + 0.25 + 0.25 - 1 ---> 0
截去誤差為實際數值與計算機所儲存數的差距
當 a 與 c 之間沒有其它數,如果 h 太小,a+h 計算後仍可能等於 a 。
國立中央大學數學系
6. 字串
字串:被雙引號或單引號框住的字元,跨列字元
需使用三個雙(單)引號夾住。
6
a = ’abc’ # abc
b = ”I’ll be back” # I’ll be back 雙引號可夾住單一個單引號
c = ””” they # theynare cats 這裡 n 為換列字元
are cats”””
d = ’a”b’ ”c’d” # a”bc’d 字串可自動合併
e = ’abc’ * 3 # abcabcabc 使用乘法複製
f = ’abc’ + ’def’ # abcdef 使用加法合併
國立中央大學數學系
7. 轉型
轉型:整數、浮點數、字串三者可使用 int, float, str 轉型
7
a = int(57.3) # 浮點數 --> 整數 57
b = int(”34”) # 字串 --> 整數 34
c = float(23) # 整數 --> 浮點數 23.
d = float(’3.23’) # 字串 --> 浮點數 3.23
e = str(35) # 整數 --> 字串 ”35”
f = str(3.14) # 浮點數 --> 字串 ”3.14”
國立中央大學數學系
8. 字串長度:len 函式
8
a = len(”abc”) # len(字串) 回傳字串長度 3
n = 2349
b = len(str(n)) # 可用求得整數 n 的位數
國立中央大學數學系
9. 指定多筆資料
指定多筆資料:使用逗號分離資料
9
a , b = 5 , 2 # a = 5 , b = 2
a , b = a + b , a – b # a = 7 , b = 3
c , d , e = 2 , 7.5 , ”cat” # c = 2 ,d = 7.5 , e = ”cat”
x , y = 4 , ”four” # x = 4 , y = ”four”
x , y = y , x # 對調 x 與 y 資料
# x = ”four” , y = 4
python 變數型別可隨時更動,並不是固定不變的
國立中央大學數學系
14. 基本運算符號 (二)
14
// 為特殊的除法運算,回傳去除小數部份的計算結果
數學上乘法符號省略方式在程式上要還原,
即 ab → a*b, 3c → 3*c
3/4 = 0.75 但 3//4 = 0
3*2**4 是 3 × ,指數運算優先於乘除
a += b 是 a = a + b 的省寫法
a += b * c 等同 a = a + ( b * c )
a *= b + c 等同 a = a * ( b + c )
a //= b + c 等同 a = a // ( b + c )
國立中央大學數學系
18. for 迴圈 (一)
for 迴圈:重複執行式子
18
for i in range(1,5) : print(i,i*i)
輸出:
1 1
2 4
3 9
4 16
迴圈末尾有冒號,之後才是要重複執行的式子。
若有多個式子,需跳列並使用定位鍵(tab 鍵) 加以縮排:
for 迴圈經常與 range 合併使用
for i in range(1,4) :
j = i**2 # j 的前面是使用定位鍵
print( i , ’平方 =’ , j ) # print 的前面是使用定位鍵
國立中央大學數學系
19. for 迴圈 (二)
產生前 n 個 Fibonacci 數字
19
n = int(input("> "))
a , b = 1 , 1
print( a , b , end =" " )
for i in range(n-2) :
a , b = b , a + b
print( b , end=" " )
輸出:
> 15
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
國立中央大學數學系
20. for 迴圈 (三)
鑽石圖形:兩個迴圈
20
n = int(input(”> ”))
# 上三角形
for i in range(n) :
print( ’ ’ * (n-1-i)+ ’*’ * (2*i+1) )
# 下倒三角形
for i in range(n-2,-1,-1) :
print( ’ ’ * (n-1-i)+ ’*’ * (2*i+1) )
輸出:
> 3
*
***
*****
***
*
> 4 *
***
*****
*******
*****
***
*
國立中央大學數學系
27. 布林數
布林數:真或假
27
假:False , None , 0 , 0.0 , 0j , ”” , [] , () , {}
真:True , 非假
例如:
>>> a = True # a 為真
>>> b = False # b 為假
>>> c = 0 # c 為假
>>> d = 1 # d 為真
>>> e = not 2 # e 為假
非零的數在邏輯上都表示真
國立中央大學數學系
28. 比較運算子
六個比較運算子:< <= > >= == !=
28
符 號 名 稱
< 小於
<= 小於或等於
== 等於
> 大於
>= 大於或等於
!= 不等於
例如:
>>> x = 7
>>> a = x < 5 # a 為假
>>> b = x >= 3 # b 為真
>>> c = 2**2 == x # c 為假
>>> d = 2 < x <= 10 # d 為真
>>> e = 1 < 3 < x # e 為假
國立中央大學數學系
29. 布林運算子: not and or
not A :回傳 A 的逆向真假值
A and B :A 與 B 兩個皆真才為真,否則為假
A or B :A 與 B 兩個皆假才為假,否則為真
適時使用小括號表示複雜的邏輯
複雜邏輯式子經常會跨列,此時要在前後加小括號
29
>>> x = 30
>>> a = not ( x > 20 ) # a 為假
>>> b = ( x < 50 and 3*x > 70 ) # b 為真
>>> c = ( x == 20 or x > 40 ) # c 為假
d = ( ( 0 < x < 30 and x%2 == 0 ) or
( x > 50 and x%5 != 0 ) )
d = ( 0 < x < 30 and x%2 == 0 ) or ( x > 50 and x%5 != 0 )
國立中央大學數學系
30. 流程控制 (一)
A if C else B :如果 C 為真則執行 A 否則執行 B
30
s = int( input(”> ”) )
print( ”P” if s >= 60 else ”F” ) # s >= 60 印出 P 否則印出 F
# A 與 B 可以為運算式
s = int( input(”> ”) ) # A = 3*5+1 B = 2+3*4
x = 3 * 5 + 1 if s else 2 + 3 * 4 # s 非零 x=A ,s 為零 x=B
流程控制:控制程式執行路徑
此種條件式經常併入運算式中,例如:
s = int( input(”> ”) )
s2 = s + ( 60-s if 55<s<60 else 0 ) # 等同 s2 = 60 if 55<s<60 else s
國立中央大學數學系
31. 流程控制 (二)
31
if A : B :如果 A 為真則執行 B
if x > 3 : print(x)
# 如果 B 不只一個式子,則 B 的每一行都要使用縮排
if 55 < x < 60 :
x = 60
print(x)
if A1 : B1 elif A2 : B2 … else :
if score >= 90 :
print( ”A” )
elif 80 <= score < 90 :
print( ”B” )
elif 70 <= score < 80 :
print( ”C” )
else :
print( ”F” )
根據問題需要,elif 或 else 可加以省略,elif 的數量不受限制。
如果 B 不只一個式子,則 B 的每一行都要使用縮排
國立中央大學數學系
32. 條件式為數字
條件式為數字:當數字為 0 或者 0.0 為假,其它
數字皆為真
32
for i in range(-3,4) :
print( ”a” if i else ”b” , end=”” ) # 印出 aaabaaa
以上等同:
for i in range(-3,4) :
if i : # 等同 if i != 0 :
print( "a" , end="" )
else :
print( "b" , end="" )
國立中央大學數學系
33. 迴圈與條件式 (一)
迴圈與條件式經常混合交織在一起
X 圖形
33
n = int( input("> ") )
for i in range(n):
for j in range(n):
if i == j or i+j == n-1 :
print( ’x’ , end=”” )
else :
print( ’ ’ , end=”” )
print()
X X
X X
X X
X
X X
X X
X X
n = 7
最後的 print() 是在 j 迴圈結束後執行
國立中央大學數學系
34. 34
迴圈與條件式 (二)
n = int( input("> " ) )
for r in range(n) :
for c in range(2*n-1) :
if c >= r and r + c <= 2*n-2 :
print( r+1 , end="" )
else :
print( ’ ’ , end="" )
print()
111111111
2222222
33333
444
5
n = 5
倒三角數字:
同個問題可能有其它作法:
n = int( input("> " ) )
m = 2*n-1
for r in range(n) :
print( ’ ’*r + str(r+1)*(m-2*r) + ’ ’*r )
國立中央大學數學系
35. 35
迴圈與條件式 (三)
n = int(input("> "))
for k in range(7,-1,-1) : > 70
# n 的第 k+1 位元位置是否有值 01000110
if n & ( 1 << k ) :
print( ’1’ , end="" ) > 130
else : 10000010
print( ’0’ , end="" )
print()
印出 255 以下數字的二進位表示方式:
整數在 [0,255] 之間僅需要八個二進位數字
國立中央大學數學系
36. while 迴圈 (一)
36
while A : B : 當 A 為真,重複執行 B 直到 A 為假
A
B
真
假
while A : B
while A :
B
while 迴圈經常可改用 for 迴圈達到相同效果
i , s = 0 , 0 | s = 0
while i < 10 : | for i in range(10) :
s += i | s += i
i += 1 |
國立中央大學數學系
37. while 迴圈 (二)
列印 1! 到 6!
37
# 讓 p , i , n 三個變數分別 1 , 1 , 6
p , i , n = 1 , 1 , 6
while i <= n :
p *= i
print( i , ”! = ” , p , sep=”” )
i += 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
國立中央大學數學系
38. 無窮迴圈 : 無止盡重複執行
while True :
n = int(input(”> ”) )
for i in range(n) :
print( ” ”*(n-1-i) + ”*”*(2*i+1) )
for i in range(n-2,-1,-1) :
print( ” ”*(n-1-i) + ”*”*(2*i+1) )
38
> 5 > 4
* *
*** ***
***** *****
******* *******
********* *****
******* ***
***** *
***
*
國立中央大學數學系
39. break (一) :提前跳出迴圈
使用 break 可跳出一層迴圈,提前離開迴圈
39
for a in A :
if B : break
while A :
for b in B :
if C : break
if d : break
C
E
D
國立中央大學數學系
40. break (二)
while True 常與 break 合用 :
40
while True :
n = int( input(”> ” ) )
# n <= 0 則跳離迴圈
if n <= 0 : break
for i in range(n) :
print( ” ”*(n-1-i) + str(i+1)*(2*i+1) )
> 4 > 5
1 1
222 222
33333 33333
4444444 4444444
555555555
國立中央大學數學系
41. break (三)
列印不在九九乘法乘積的兩位數
41
i = 0
for n in range(10,100) :
found = True # 先設定 found 「找到」為真
for x in range(2,10) : # 除數範圍 x 由 2 到 9
if n%x == 0 and n//x < 10 : # 當 x 能整除 n 且商為個位數
found = False # 排除數字 n,設定 found 為假
break # 並提早跳離迴圈
if found : # 當 found 「找到」仍為真
i += 1
print( n , end=" " )
if i%20 == 0 : print() # 每 20 個數換列
print()
輸出:
11 13 17 19 22 23 26 29 31 33 34 37 38 39 41 43 44 46 47 50
51 52 53 55 57 58 59 60 61 62 65 66 67 68 69 70 71 73 74 75
76 77 78 79 80 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
97 98 99
國立中央大學數學系
42. continue (一) : 提前進入下個佚代
continue 可提前進入下個佚代步驟,但不像
break 一樣跳出迴圈
42
if A : continue
B
while True :
if not A :
B
while True :
國立中央大學數學系
43. continue (二)
43
列印不是 3 或 5 或 7 倍數的兩位數
i = 1
for n in range(10,100) :
if n%3 == 0 or n%5 == 0 or n%7 == 0 : continue
print( i , n )
i += 1
以上等同:
i = 1
for n in range(10,100) :
if not ( n%3 == 0 or n%5 == 0 or n%7 == 0 ) :
print( i , n )
i += 1
當「not」條件式不容易理解時,就是使用 continue 的時機
國立中央大學數學系
44. 簡單格式輸出 (一):format
format 設定資料的輸出格式,以字串表示
可設定資料輸出寬度(w)、靠左對齊(<)、靠右對齊(>)、置中
對齊(^)、填補字元(f)
"{:f>w}".format(a):資料 a 用 w 格輸出,靠右對齊,
如果有剩餘格數,填補上 f 字元,
若沒有設定 f,則以空格替代
44
語法 產生字串
"{:#<5}".format(17) ’17###’
"{:>2}-{:>2}".format(3,28) ’ 3-28’
"20{:<2}/{:0>2}/{:0>2}".format(18,4,5) ’2018/04/05’
"{:<3}={:#>5}".format("pi",3.14) ’pi =#3.14’
國立中央大學數學系