iT邦幫忙

2022 iThome 鐵人賽

DAY 20
0
自我挑戰組

30天建構出一個簡單 LineBot 機器人系列 第 20

DAY 20 Python基本語法(下篇)

  • 分享至 

  • xImage
  •  

這篇為進階語法包含邏輯判斷、邏輯判斷、重複迴圈、例外處理的用法,以及break和continue、安裝與匯入模組的詳細介紹。

註解

首先先介紹寫程式中經常使用的註解,註解是在程式碼中「不會被執行的文字」。
Python中用「#」做為單行註解,用「三個雙引號 """ 或三個單引號 '''」做多行註解。

# 井字號後面可以寫一行的註解
'''
這裡是多行註解,
不影響程式執行的結果。
'''
print('Hello, World!')   # 單行註解也可以寫在程式碼後方

邏輯判斷 ( if、elif、else )

使用if 條件對應的程式需使用「縮排」,如果判斷為 True,就會執行對應的程式,反之如果是 False,就會跳過判斷式,繼續執行下方的程式。
if和elif為各自對應的True結果執行對應的程式,而else對應結果為False的程式。

a = 2
b = 3
if a>b:
    print('a>b')    # 不會印出
elif a<b:
    print('a<b')    # a<b
else:
    print('a=b')    # 不會印出
print('ok')         # ok

如果遇到「不想執行任何動作」的狀況,可以使用「pass」作為空式子可保持語法的正確性。

a = 2
b = 3
if a>b:
    pass            # 不做任何動作
elif a<b:
    print('a<b')    # a<b
else:
    print('a=b')    # 不會印出
print('ok')         # ok

邏輯判斷 ( and 和 or )

以下三點介紹and以及or的差別:

  • 使用 and 運算,如果全部都是 True,回傳 True 的值,否則回傳 False 的值。
  • 使用 or 運算,如果全為 False,回傳 False 的值,否則回傳 True 的值。
  • 元素除了 0、空值、None 和 False,其他在判斷式裡全都是 True。
a = 1
b = 2
c = 3
if a<b and a<c:
    print('ok1')    # 顯示 ok1
if a<b or a>c:
    print('ok2')    # 顯示 ok2

如果同時有 and 和 or,則會先判斷 and,然後再接著從左向右判斷:

a = 2
b = 3
c = 0
if a>b or a<c or a==2 and b==4:
    print('ok1')
else:
    print('XXX')       # 印出 XXX

重複迴圈 ( for、while )

「for 迴圈」 的使用的方法為「for 變數 in 可迭代的物件:」,執行之後,for 迴圈會依序將可以迭代的物件取出,賦值給指定的變數。

for i in 'abc':
    print(i)    # a  b  c ( 字串 )

for i in ['a','b','c']:
    print(i)    # a  b  c ( 串列 )

for i in {'a','b','c'}:
    print(i)    # c  b  a ( 集合 )

for i in {'a':1,'b':2,'c':3}:
    print(i)    # a  b  c ( 字典 )

若為巢狀迴圈(多層重複迴圈)會先從「最內層」的迴圈開始執行,執行完畢後再執行外層的迴圈

for a in ['x','y','z']:
    for b in [1,2,3]:
        print(b)
  print(a)

# 1 2 3 x 1 2 3 y 1 2 3 z

若搭配文字的格式化,就能利用巢狀迴圈做出結合的效果:

for a in ['x','y','z']:
    for b in [1,2,3]:
        print(f'{a}{b}')

# x1 x2 x3 y1 y2 y3 z1 z2 z3

「while 迴圈」 是「根據條件判斷,決定是否重複或停止」的迴圈,用法為「while 條件:」,如果條件判斷為 True,就會不斷執行迴圈內容,如果判斷為 False,就會停止迴圈。

a = 1
while a<=5:
    print(a)
    a += 1

# 1 2 3 4 5

break 和 continue

在使用迴圈的過程中可以使用「break 中斷」和「continue 跳出」兩個方法來「停止迴圈」。
break 和 continue 的差別在於 break 會將整個迴圈停止,而 continue 是將迴圈目前執行的程式停止,然後再次執行迴圈,下圖為兩者的執行差異。


圖片來源:STEAM教育學習網

「break 中斷」
以下範例因為內層迴圈使用了break,碰到 b 為 1 的時候就會停止,就看不見 2 和 3。

for a in ['x','y','z']:
    for b in [1,2,3]:
        if(b==2):
            break
        print(f'{a}{b}')
print('ok')

# x1 y1 z1 ok

「continue 跳出」
以下範例因為使用 continue,則會略過 b 為 2 的部分,直接跳到 b 為 3 的部分。

for a in ['x','y','z']:
    for b in [1,2,3]:
        if(b==2):
            continue
        print(f'{a}{b}')
print('ok')

# x1 x3 y1 y3 z1 z3 ok

例外處理 ( try、except )

有時候執行程式會發生「TypeError」的錯誤 ( 因為輸入的是文字,文字無法和數字相加 ),也因為發生錯誤,進而造成程式停止,後方程式無法正常執行。

如下範例會發生錯誤導致程式停止

a = input('輸入數字:')
print(a + 1)       # 發生錯誤
print('hello')      # 因為發生錯誤,造成程式停止,所以後方程式無法執行

#輸入數字: 1
#TypeError

若要避免程式因錯誤而停止,可使用 try 和 except 進行保護(或測試),當 try 區段內的程式發生錯誤時,就會執行 except 裡的內容,如果 try 的程式沒有錯誤,就不會執行 except 的內容

try:                      # 使用 try,測試內容是否正確
    a = input('輸入數字:')
    print(a + 1)
except:                   # 如果 try 的內容發生錯誤,就執行 except 裡的內容
    print('發生錯誤')
print('hello')

#輸入數字: 1
#發生錯誤
#hello

加入 pass 略過
使用 try... except 有時候會遇到「不想做任何動作」的狀況(也不想輸出文字訊息),這時可以使用pass 語法來略過。

try:                      # 使用 try,測試內容是否正確
    a = input('輸入數字:')
    print(a + 1)
except:                   # 如果 try 的內容發生錯誤,就執行 except 裡的內容
    pass                  # 略過
print('hello')

pip 安裝模組

pip是一個Python安裝管理套件工具,使用pip來安裝或是更新套件,需pip安裝第三方套件後才可以在撰寫程式中來import使用

pip -V                             #查看pip的版本,及對應的python版本
pip install -U pip                 #更新pip
pip list                           #列出所有安裝哪些套件
pip search package                 #搜尋相關套件
pip install package                #安裝套件
pip uninstall package              #移除套件
pip install --upgrade package      #升級套件

import 匯入模組

Python的程式碼也可以當作模組使用,透過import陳述式,可引用其他模組的程式碼,進一步使用其他模組的程式和變數。

  1. 可以使用「from 模組名稱 import 方法」,單純匯入模組中的某一段程式,以下範例為匯入了 date 方法。
from datetime import date
print(date.today())     # 2021-10-18
  1. 可以使用「import 模組 as 別名」將模組使用「別名」的方式匯入,就不會更動到自己的程式,以下範例將匯入模組賦予 datetime 一個別名 dd。
import datetime as dd
print(dd.datetime.now())   # 2021-10-18 06:39:48.998396
print(dd.date.today())     # 2021-10-18
  1. 每一支 Python 程式都可以作為模組,所以可以將共用的程式打包變成模組,再透過其他程式引用,以下範例為透過 main.py 匯入 ok.py,執行 ok.py 裡的 talk 函式。

<ok.py>

def talk(msg):
  print(msg)

<main.py>

import ok
ok.talk('hi')   # hi

明天來介紹超方便快速的線上編輯器Google Colab ~


上一篇
DAY 19 Python基本語法(上篇)
下一篇
DAY 21 如何使用Google Colab
系列文
30天建構出一個簡單 LineBot 機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言