程式輸入輸出

了解變數資料類型操作之後,接下來介紹程式輸入與輸出,輸入將資料從外部讀入程式中,課程將介紹 使用者輸入-input()、錯誤處理-try except finally、輸出-print()、讀取檔案-read()、readline()、readlines()、寫入檔案-write()、writelines()、requests模組、JSON模組

使用者輸入-input()

Python input()用於讀取使用者輸入,直到使用者按下Enter鍵,使用方次包含 input()或input('提示文字'),input()傳回文字。

  x=input()
  print(int(x)*10)
  y=int(input('請輸入整數:'))
  print(y*10)

練習:請利用 input() 函數輸入兩個數並印出兩個數字和。

錯誤處理-try except finally

錯誤處理-try except finally 用於設定錯誤檢查,try 區域用於執行可能會發生錯誤的程式區塊,except 區域用於設定當 try 發生錯誤時要執行的程式區塊,finally 區域用於設定不論是否發生錯誤都要執行的程式區塊。except 偵測錯誤類型如下圖:

請執行先前輸入數字練習,輸入文字後發生 ValueError 錯誤,當我們將程式加入錯誤檢查,當使用者輸入錯誤時,程式會執行 except 區塊,如果使用者不清楚錯誤類型,則不須設定錯誤類型,僅使用 except 即可。

  try:
    x=input()
    print(int(x)*10)
  except ValueError:
    print('請輸入整數')
輸出-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}')

練習:請利用 input() 函數輸入兩個變數 x 與 y,使用 print()函數搭配 f 字串輸出 x個空白、y個 *。

讀取檔案-read()、readline()、readlines()

資料輸入除來自使用者,還有包含檔案,檔案讀入函數包含 read()、readline()、readlines(),執行檔案讀入之前,使用必須先開啟檔案(open()函數),讀入完畢後,必須關閉檔案(close()函數)。

  • open('檔案位置/名稱','檔案模式',encoding='檔案編碼')檔案位置/名稱 為輸入檔案相對於python程式的相對位置與檔名,下列範例將資料檔案 test.txt 置於files檔案夾中。檔案模式包含 r、w、a、x、t、br 代表唯讀(如果讀取檔案不存在會產生錯誤)、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()
    

練習:請利用 try except檢查檔案操作,當發生錯誤時,輸出錯誤訊息。

使用系統資源操作(如檔案),當使用者不再需要時,必須釋放資源(如檔案close()),如果使用者忘了釋放資源,最終系統有可能會耗盡資源(記憶體)。為了避免使用者忘了釋放資源,Python可以使用 with 資源操作命令 as 變數,當使用者結束with程式區塊時,系統資源就會被釋放。請注意:with命令可搭配 try except。

with open('files/test.txt','rt',encoding='utf-8') as f:
  print(f.readlines())
寫入檔案-write()、writelines()

如同檔案讀取,write() 用於將代入內容寫入檔案,而 writelines() 用於將清單字串寫入檔案。

  with open('files/test2.txt','wt',encoding='utf-8') as f:
    f.write('南臺科技大學\n')
    f.writelines(['資訊管理系\n','資管一甲'])

練習:請利用input()命令輸入輸出檔名並輸入一串字,檔名與字用空格隔開(如 test2.txt Hello! How are you?),寫入後請印出檔案內容,請比較檔案模式 a 與 w 的差異。

requests模組

資料輸入另一個方式是從網路取得資料,我們將藉由 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模組

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

練習:請到中央氣象局氣象資料開放平台註冊(https://opendata.cwb.gov.tw/index),登入後取得授權碼,並選擇 開發指南-資料擷取API說明文件,點選 一般天氣預報-今明 36 小時天氣預報,之後請用 requests 與 json模組讀取縣市天氣資料。

條件-if

當程式需進行條件判斷時會使用條件 if,Python條件設定有下列三種模式:

  if 條件:
    條件對執行命令
  if 條件:
    條件對執行命令
  else:
    條件錯執行命令
  if 條件1:
    條件1對執行命令
  elif 條件2:
    條件2對執行命令
  elif 條件3:
    條件3對執行命令
  else:
    先前條件都錯執行命令

練習:輸入月份,然後判斷其所屬的季節(3~5月為春季,6~8月為夏季,9~11月為秋季,12~2 月為冬季)。

練習:E-Tutor線上題庫-基礎題目 34、39。

迴圈-for

當程式需重複執行時會使用迴圈,Python迴圈設定有下列二種模式:for迴圈與while迴圈,for迴圈用於順序資料,while迴圈則當條件為真時重複執行。

  for i in range(0,9):
    迴圈執行命令(共9次)
  while 條件:
    迴圈執行命令

迴圈通常會搭配兩個命令 break、continuebreak用於跳出現在的迴圈,continue用於停止繼續執行接下的迴圈命令,回到迴圈的開使,繼續下一個迴圈命令。

練習:輸入一個數字並印出該數正因數(一個數的因數是指該數可被其因數整除)。

練習:輸入一個數字並印出該數的空心等腰直角三角形。

練習:E-Tutor線上題庫-基礎題目 8、9、20、26。