PYTHON

Lesson 2

流程控制

Lecturer: 立葉

運算子

加加減減乘乘除除模模

運算子 意義 舉例 結果
+ 5+2 7
- 5-2 3
* 5*2 10
** 次方 5**2 25
/ 浮點除法 5/2 2.5
// 整數除法 5//2 2
% 模(取餘數) 5%2 1

顯然只有我能偷暑訓簡報吧,乘一你沒機會

窩想讓程式看起來更簡潔

複合指定運算子 舉例 改寫
+= a=a+2 a+=2
-= a=a-2 a-=2
* a=a*2 a*=2
** a=a**2 a**2
/ a=a/2 a/=2
// a=a//2 a//=2
% a=a%2 a%=2

比較運算子

運算子 舉例 意義
< 5<2 5是否小於2
> 5>2 5是否大於2
<= 5<=2 5是否小於等於2
>= 5>=2 5是否小於等於2
== 5==2 5是否等於2
!= 5!=2 5是否不等於2

回傳一個布林值(True/False)!

邏輯運算子

運算子 意義
and
or
not

回傳一個布林值(True/False)!

真真甲甲

 A B A and B A or B
True True True True
True False False True
False True False True
False False False False

小小小小小補充

python 的 pow()函數

  • pow(底數, 指數)
  • pow(底數, 指數, 模數)
print(pow(5,3))
#125
print(pow(5,3,11))
#4

上次課程的小補丁<3

eval() 函數

  • 可以把輸入的東西轉換成一個數字!
  • 它能自己判斷自己是整數還是浮點數!
a = eval('1')
b = eval('0.1')
print(a, type(a))
print(b, type(b))
'''
1 <class 'int'>
0.1 <class 'float'>
'''

有關 eval() 更進階的用法(?

  • 其實 eval() 是把字串表示式轉換成一個程式碼來執行!
  • 會回傳這行程式碼的回傳值,沒有回傳值則回傳 None
print(eval("5*(3+2)"))
'''
25
'''
print(eval("print(\"hello world!\")"))
'''
hello world!
None
'''

於是,zj a017 就這麼被破解了

用 C++ 寫出這題和用 python 寫出這題的兩種人

實力相差是很大的w

print(eval(input()))

但其實只寫這樣不會過w

有興趣可以自己想想看原因

條件敘述if

if

格式:

if 條件為True:
  要執行的程式

範例:

a = input("你的國文答案卡有沒有寫名字? 沒有的話請打n\n")
if a == 'n':
  print("扣10分哈哈哈哈哈")

順帶提一下縮排

if 條件為True:
  #我在if條件式裡面
#我不在if條件式裡面

python 非常重視縮排!

這會關係到電腦判斷該行程式有沒有在那個函式裡面

if...else...

格式:

if 條件為True:
  要執行的程式
else:
  條件為False時要執行的程式

範例:

a = input("你的國文答案卡有沒有寫名字? 沒有的話請打n\n")
if a == 'y':
  print("好吧不會被扣冤枉分數了隨便你啊就這樣吧")
else :
  print("我覺得你要被扣分了啦哈哈哈哈哈")

if...elif...else...

格式:

if 條件式1為True:
  要執行的程式
elif 條件式2為True:
  要執行的程式
else:
  以上條件式皆為False時要執行的程式

範例:

a = input("你的國文答案卡有沒有寫名字? 沒有的話請打n\n")
if a == 'y':
  print("好吧不會被扣冤枉分數了隨便你啊就這樣吧")
elif a == 'n':
  print("我覺得你要被扣分了啦哈哈哈哈哈")
else:
  print("我怎麼聽不懂你在說什麼")

巢狀if

n = input("你是不是穿便服? y/n")
if n == 'y':
  a = input("你有帶學生證嗎? y/n")
  if a == 'y':
    print("好吧姑且放過你一馬")
  elif a == 'n':
    print("來,愛校服務一支")
elif n == 'n' :
  print("同學早安")
else:
  print("蛤你說什麼")

例題時間

先寫一下這三題ㄅ~

迴圈

while 迴圈

格式:

while 條件式為True:
  要執行的程式

範例:

i = 0
while i<5:
  print(i)
  i+=1;

for 迴圈

格式:

for i in range():
  要執行的程式

其中 range() 裡面要放的咚咚可以是:

  • (次數)
  • (起始點, 終止點, 公差)

for 迴圈

又或是... 也可以放一個 字串串列 來掃描!

別急 下次會教

a = ['ckefgisc', 2728]
for i in a:
  print("hey", i)
#hey ckefgisc
#hey 2728

單行ㄉ for 迴圈!

num_list = [i**3 for i in range(1,6)]
for i in num_list:
  print(i,end=' ')
# 1 8 27 64 125

這已經是我第三次講無限迴圈ㄌ

while True:
  print("I want to skip English class")

這個條件不會變成 False

所以它會不斷地進入迴圈

迴圈控制

  • break:跳出最內圈的迴圈
  • continue:回到最內圈迴圈的起點
for i in range(0,10,1):
  if i==5: break
  else: print(i)
for i in range(0,10,1):
  if i==5: continue
  else: print(i)

巢狀迴圈

for i in range(2):
  for j in range(3):
    print("*",end='')
  print()
'''
***
***
'''
for i in range(1,4):
  for j in range(0,i):
    print("*",end='')
  print()
'''
*
**
***
'''

來註冊 Project Euler~

\(times (sin^2 \theta + cos^2 \theta)\) 和 \( green house vegetable\) 推薦ㄉ

來註冊 Project Euler~

Problem 1

找出所有小於1000,且為3或5的倍數的數字總合!

好了的話 problem 2-9 也都殼以是是看!

或是你想寫 zerojudge ㄉ題目也行

EOF 處理

測資的重複輸入... what's that?

  • 測資說 重複輸入直到EOF為止...
  • 測資說 重複輸入直到輸入一個特定的字...
while True:
  a = int(input())
  if a==0: 
    #假設今天指定輸入0作為重複輸入的終結
    break

如果是第二種:

如果是第一種的話那怎麼辦ㄋ

例外處理

當我們的程式遇到了錯誤,程式就不能跑ㄌ... 例如:

a = "hello"
b = 1
print(a+b)
#把型別不同的變數並列在一起ㄌ
print(6/0)
#除以0無意義
#幸好沒有造成傷亡
  • TypeError
  • ZeroDivisionError

例外處理

為了避免程式遇到錯誤就直接停止運行,

我們可以運用下面的咚咚來進行例外處理:

  • try
  • except
  • pass
try:
  '''要保護的程式碼'''
except:
  '''程式碼有錯誤的時候要做什麼'''

pass:放在except下面,代表略過,什麼事都不做

例外處理

像~醬:

try:
  a = "hello"
  b = 1
  print(a+b)
except:
  pass
try:
  a = int(input())
  b = int(input())
  print(a//b)
except:
  print("Oooooops, looks like something has gone wrong!")
  • TypeError
  • ZeroDivisionError

我想介紹例外處理的真正目的

-- 來處理EOF !

while True:
  try:
    '''你要重複執行的程式'''
  except EOFError:
    break

你學廢了嗎

例題時間

話不多說,馬上來練習一題

EOF 的題目

match case

python 3.10 ㄉ新功能!

在 repl.it 上記得要選 Python 3.10 的ㄛㄛㄛ

範例 - 1

n = input("輸入一個科目代碼: ")
match n:
  case '010':
    print("Chinese")
  case '020':
    print("English")
  case '030':
    print("Math")
  case other: #case _:
    print("我懶得列出來剩下ㄉ")
n = input()
if n=='010':
  print("Chinese")
else if n=='020':
  print("English")
else if n=='030':
  print("Math")
else:
  print("我懶得列出來剩下ㄉ")

範例 - 2

score = int(input("來猜我的歷史成績: "))
match score:
  case score if score%2==1:
    print("歷史一題兩分欸拜託")
  case score if score>90:
    print("那是 Ivan Lo 欸,顯然不是我")
  case 74 | 76:
    print("你怎麼猜到的")
  case score if score>60:
    print("好欸歷史及格ㄌ")
  case _:
    print("哭ㄌ")
    

補充資料 (蛤

match case 可以算是看似直覺...

實則很深奧的一個函式

你真的對這個咚咚超有興趣的話

可以來看看這篇

The Match-Case In Python 3.10 Is Not That Simple 

每日宣傳秋遊(1/1) 🥳