python-4
EOF處理 各種補丁:)
by SID
EOF處理
try ... except ...
EOF(End Of File)是甚麼?
可能有題目這樣寫:
重複輸入直到EOF為止
重複輸入直到輸入一個字
如果是第二種:
while True:
a = int(input())
if a==0:
#假設今天指定輸入0作為重複輸入的終結
break
可如果是第一種 便不會知道共有多少測資
也就不知道重複輸入的中止條件或是要重複輸入幾次
直接用while(True)更是一定會TLE
例外處理
當我們的程式遇到了錯誤,程式就會直接噴error...
例子:
a = "hello"
b = 1
print(a+b)
#把型別不同的變數並列在一起ㄌ
當我們在執行一個會跑很久很久的大程式
絕對不會希望因為一個打扣時的手殘導致整個程式error
要花很多時間全部重跑對吧?
print(6/0)
#除以0無意義
- TypeError
-
ZeroDivisionError
try ... except ...
基於上述理由 所以我們要來學try ... except ...
try:
要保護的程式碼
except:
程式碼有錯誤的時候要做什麼
pass#程式碼錯誤時甚麼都不做
格式:
pass也可以放在迴圈的條件判斷裡面
當你還沒想好遇到這個條件要做甚麼
可以先打pass 然後就可run整個程式
這個時候就不會因為if或elif或else的下面空白導致error
絕對不是上次課程忘記講:)
例外處理
try:
a = "hello"
b = 1
print(a+b)
except:
pass
try:
a = int(input())
b = int(input())
print(a//b)
except:
print("something has gone wrong!")
-
TypeError
-
ZeroDivisionError
例外處理的真正目的:
處理EOF
while True:
try:
你要重複執行的程式
except EOFError:
break
醬就殼以了啦!!!
練習題來了
資料型態補丁
換不同的進位制
Decimal
eval()
整數進位制轉換
bin() ➜ 將⼗進制轉為⼆進制
oct() ➜ 將⼗進制轉為八進制
hex() ➜ 將⼗進制轉為⼗六進制
int() ➜ 將其他進制 或 ⽂字型態 轉為⼗進制整數
eval()
使⽤內建 eval() 函式
可以將⽂字轉變為類程式碼(可執⾏運算式)。
例子:
number = eval(input()) #10
print(number) #10
print(type(number)) #<class 'int'>
number = eval(input()) #1 + 2
print(number) #3
print(type(number)) #<class 'int'>
number = eval(input()) #a = 10
print(a) #Error
精準小數資料型態
Python 有⼀個內建模組 - Decimal
可以⽤來更精準地進⾏數值運算
import decimal
print(0.3 + 0.3 + 0.3) #0.8999999999999999
print(0.3 * 3) #0.8999999999999999
number = decimal.Decimal("0.3")
print(number + number + number) #0.9
print(number * 3) #0.
運算子補丁
位元運算子
位移運算子
成員運算子
身分運算子
位元運算子
因為電腦都是透過⼆進位進⾏數值運算
有時候利⽤位元運算⼦計算能達到更⾼的效率
例子:
位元運算子 | 功用 |
---|---|
& | And (皆1則1) |
| | Or (皆0則0) |
^ | Xor(相異則1) |
~ | Not(顛倒數值) |
位元運算子
因為電腦都是透過⼆進位進⾏數值運算
有時候利⽤位元運算⼦計算能達到更⾼的效率
例子:
位元運算子 | 功用 |
---|---|
& | And (皆1則1) |
| | Or (皆0則0) |
^ | Xor(相異則1) |
~ | Not(顛倒數值) |
位元運算子
因為電腦都是透過⼆進位進⾏數值運算
有時候利⽤位元運算⼦計算能達到更⾼的效率
例子:
位元運算子 | 功用 |
---|---|
& | And (皆1則1) |
| | Or (皆0則0) |
^ | Xor(相異則1) |
~ | Not(顛倒數值) |
位移運算子
⼆進位時可以快速進⾏乘除數值運算
概念是使⽤ >> 或 << 的⽅式移動位元
相當於是乘以2倍或除以2倍。
例子:
位移運算子 | 功用 |
---|---|
>>n | 右移 n 位元 |
<<n | 左移 n 位元 |
位移運算子
⼆進位時可以快速進⾏乘除數值運算
概念是使⽤ >> 或 << 的⽅式移動位元
相當於是乘以2倍或除以2倍。
例子:
位移運算子 | 功用 |
---|---|
>>n | 右移 n 位元 |
<<n | 左移 n 位元 |
身份運算子
利⽤關鍵字 is,可以判斷左右資料的 id(記憶體位置) 是否相同, 因此 x is y 等價於判斷 id(x) == id(y)。
import decimal
x = y = 2.5
print(x is y) #True
z = decimal.Decimal("2.5")
print(x is z, x == z) #False True
成員運算子
利⽤關鍵字 in,可以判斷左右資料之間的從屬關係。
print("P" in "Python") #True
print(1 not in [1, 2, 3]) #False
好ㄟ結束了!
下星期一及下下星期一中午沒有python小社喔!
段考前停課兩次
下下下周課程預告:List
似乎上周的課程預告就是List:)
好多下