了解變數資料類型操作之後,接下來介紹程式輸入與輸出,輸入將資料從外部讀入程式中,課程將介紹 使用者輸入-input()、錯誤處理-try except finally、輸出-print()、讀取檔案-read()、readline()、readlines()、寫入檔案-write()、writelines()、requests模組、JSON模組。
Python input()用於讀取使用者輸入,直到使用者按下Enter鍵,使用方次包含 input()或input('提示文字'),input()傳回文字。
x=input()
print(int(x)*10)
y=int(input('請輸入整數:'))
print(y*10)
錯誤處理-try except finally 用於設定錯誤檢查,try 區域用於執行可能會發生錯誤的程式區塊,except 區域用於設定當 try 發生錯誤時要執行的程式區塊,finally 區域用於設定不論是否發生錯誤都要執行的程式區塊。except 偵測錯誤類型如下圖:
請執行先前輸入數字練習,輸入文字後發生 ValueError 錯誤,當我們將程式加入錯誤檢查,當使用者輸入錯誤時,程式會執行 except 區塊,如果使用者不清楚錯誤類型,則不須設定錯誤類型,僅使用 except 即可。
try:
x=input()
print(int(x)*10)
except ValueError:
print('請輸入整數')
輸出方式包含 print(變數)、print('{}'.format(變數))、print(f'{變數}') ,建議使用 print(f'{變數}') 進行輸出,請注意變數後可接 資料類型操作中格式化輸出。
print(f'{" "*5}*')
print(f'{" "*4}{"*"*3}')
print(f'{" "*3}{"*"*5}')
print(f'{" "*2}{"*"*7}')
print(f'{" "*1}{"*"*9}')
print(f'{" "*0}{"*"*11}')
資料輸入除來自使用者,還有包含檔案,檔案讀入函數包含 read()、readline()、readlines(),執行檔案讀入之前,使用必須先開啟檔案(open()函數),讀入完畢後,必須關閉檔案(close()函數)。
open('檔案位置/名稱','檔案模式',encoding='檔案編碼'):檔案位置/名稱 為輸入檔案相對於python程式的相對位置與檔名,下列範例將資料檔案 test.txt 置於files檔案夾中。檔案模式包含 r、w、a、x、t、b, r 代表唯讀(如果讀取檔案不存在會產生錯誤)、w 代表寫入(如果讀取檔案不存在會建立新檔案,如果檔案存在,會清除檔案內容)、a 代表新增(如果讀取檔案不存在會建立新檔案,如果檔案存在,不會清除檔案內容)、x 代表建立檔案(如果讀取檔案存在,會生錯誤)、t 代表文字檔案、b 代表二進制檔案。編碼模式常用為 utf-8。請注意:open()函數會傳回檔案物件。
f=open('files/test.txt','rt',encoding='utf-8')
f.close()
read():read()函數可以代入讀取大小,如果未代入大小,則全部讀取。
f=open('files/test.txt','rt',encoding='utf-8')
print(f.read())
f.close()
f=open('files/test.txt','rt',encoding='utf-8')
print(f.read(4))
f.close()
readline():readline()函數讀取一整行。請注意readline()傳回值會包含跳行符號。如果要移除讀入資料的跳行符號,可以使用字串 splitlines() 函數。
f=open('files/test.txt','rt',encoding='utf-8')
print(f.readline())
f.close()
readlines():readlines()函數讀取全部並將每一行以清單項目傳回。
f=open('files/test.txt','rt',encoding='utf-8')
print(f.readlines())
f.close()
使用系統資源操作(如檔案),當使用者不再需要時,必須釋放資源(如檔案close()),如果使用者忘了釋放資源,最終系統有可能會耗盡資源(記憶體)。為了避免使用者忘了釋放資源,Python可以使用 with 資源操作命令 as 變數,當使用者結束with程式區塊時,系統資源就會被釋放。請注意:with命令可搭配 try except。
with open('files/test.txt','rt',encoding='utf-8') as f:
print(f.readlines())
如同檔案讀取,write() 用於將代入內容寫入檔案,而 writelines() 用於將清單字串寫入檔案。
with open('files/test2.txt','wt',encoding='utf-8') as f:
f.write('南臺科技大學\n')
f.writelines(['資訊管理系\n','資管一甲'])
資料輸入另一個方式是從網路取得資料,我們將藉由 requests 模組,透過http取得網路資料,要使用 requests模組我們必須先安裝Python套件安裝程式(pip),請在命令提示字元視窗中執行下列命令來安裝 pip:
py -m pip install --upgrade pip
安裝完 pip 之後,請在命令提示字元視窗中執行 py -m pip install "requests" 來安裝requests模組。安裝之後,請使用 from pip._vendor import requests 在程式匯入 requests模組。透過 requests.ger(url:'資料API網址') 存取網路資源,傳回物件屬性 status_code傳回網路存取狀態(例如值為200代表成功,404代表找不到等),臺南市公有免費停車場開放資料為例(https://citypark.tainan.gov.tw/App/parking.ashx?verCode=5177E3481D&type=1&ftype=1&exportTo=2),因為傳回值為JSON清單,因此程式範例除匯入 requests 模組外,另外還使用系統內建 json 模組。
from pip._vendor import requests import json r=requests.get(url='https://citypark.tainan.gov.tw/App/parking.ashx?verCode=5177E3481D&type=1&ftype=1&exportTo=2') data=r.json() print(data)
JSON格式同Python中字典類型(dictionary),常用函數包含 json.loads()、json.dumps(),json.loads(同json())將字串格式JSON值轉為JSON物件,而json.dumps()將JSON物件轉為字串格式JSON值(請設定 ensure_ascii=False)。
import json
data=json.loads('{"name":"南台科技大學"}')
print(data)
print(json.dumps(r,ensure_ascii=False))
當程式需進行條件判斷時會使用條件 if,Python條件設定有下列三種模式:
if 條件:
條件對執行命令
if 條件:
條件對執行命令
else:
條件錯執行命令
if 條件1:
條件1對執行命令
elif 條件2:
條件2對執行命令
elif 條件3:
條件3對執行命令
else:
先前條件都錯執行命令
當程式需重複執行時會使用迴圈,Python迴圈設定有下列二種模式:for迴圈與while迴圈,for迴圈用於順序資料,while迴圈則當條件為真時重複執行。
for i in range(0,9):
迴圈執行命令(共9次)
while 條件:
迴圈執行命令
迴圈通常會搭配兩個命令 break、continue,break用於跳出現在的迴圈,continue用於停止繼續執行接下的迴圈命令,回到迴圈的開使,繼續下一個迴圈命令。