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:)

好多下