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 可以算是看似直覺...
實則很深奧的一個函式
每日宣傳秋遊(1/1) 🥳