iT邦幫忙

1

Day 12:資料驗證——處理空白欄位與不合理的輸入

  • 分享至 

  • xImage
  •  

一、前言

在前幾天的學習中,我已經完成健康紀錄的資料結構設計,並學習使用 Python、List、Dictionary、Pandas、CSV 與 SQLite 儲存及讀取資料。

不過,當使用者開始輸入資料時,並不是每一次輸入都會符合系統的需求。例如,使用者可能忘記填寫喝水量、將睡眠時間輸入成文字,或是不小心輸入負數。如果系統沒有檢查這些資料,就可能導致程式發生錯誤,或讓後續統計結果失去參考價值。

因此,今天的學習重點是資料驗證(Data Validation),讓系統在儲存健康紀錄之前,先確認使用者輸入的內容是否完整、格式是否正確,以及數值是否合理。

二、為什麼需要資料驗證?

資料驗證的目的,是避免錯誤或不完整的資料進入系統。以個人健康習慣追蹤系統為例,常見的輸入問題包括以下幾種。

https://ithelp.ithome.com.tw/upload/images/20261023/20178903WvkseEBbNQ.png

透過這些檢查,系統可以在資料儲存前先攔截常見錯誤,降低後續資料分析與統計發生問題的機率。

需要注意的是,數值範圍只是程式用來辨識明顯錯誤的基本檢查條件,不代表醫療上的標準,也不能單憑這些數值判斷個人的健康狀況。

三、使用 Python 檢查空白欄位

首先,可以使用 input() 接收使用者輸入的資料,再透過 strip() 去除文字前後的空白。

如果使用者只輸入空格,程式也會將它視為空白資料。

water_input = input("請輸入今日喝水量(毫升):").strip()

if water_input == "":
print("輸入錯誤:喝水量不可空白。")
else:
print("輸入成功:", water_input)

這段程式會先檢查使用者是否有輸入內容。如果欄位是空的,就顯示錯誤訊息;如果有輸入內容,才繼續處理。

四、檢查輸入格式與數值範圍

即使使用者有輸入內容,也不代表輸入的一定是數字。例如,喝水量可能被輸入成「很多」或「500ml」。

這時可以使用 try...except 處理數字轉換時可能發生的錯誤,再透過 if 判斷數值是否落在設定的合理範圍內。

water_input = input("請輸入今日喝水量(毫升):").strip()

if water_input == "":
print("輸入錯誤:喝水量不可空白。")
else:
try:
water = int(water_input)

    if water < 0:
        print("輸入錯誤:喝水量不可為負數。")
    elif water > 10000:
        print("請確認輸入的喝水量是否正確。")
    else:
        print("喝水量紀錄成功:", water, "毫升")

except ValueError:
    print("輸入錯誤:請輸入整數。")

這段程式包含三個重要概念:

int():將輸入內容轉換成整數。

try...except:當輸入內容無法轉換成整數時,避免程式直接中斷。

if...elif...else:根據數值的不同情況,決定要顯示錯誤訊息或接受資料。

範例中的 10,000 毫升是用來示範程式如何檢查過高的數值,實際使用時應依照專案需求調整,並允許使用者確認或修正輸入。

五、建立可重複使用的驗證函式

如果每一個健康欄位都重複撰寫相似的檢查程式,程式碼會變得冗長。因此,可以將驗證邏輯整理成函式,方便後續重複使用。

以下以睡眠時間為例,檢查使用者是否輸入數字,以及數值是否介於 0 到 24 小時之間。

def validate_sleep(value):
value = value.strip()

if value == "":
    return False, "睡眠時間不可空白。"

try:
    sleep = float(value)
except ValueError:
    return False, "睡眠時間必須是數字。"

if sleep < 0 or sleep > 24:
    return False, "睡眠時間必須介於 0 到 24 小時。"

return True, sleep

sleep_input = input("請輸入今日睡眠時間(小時):")

is_valid, result = validate_sleep(sleep_input)

if is_valid:
print("睡眠紀錄成功:", result, "小時")
else:
print("輸入錯誤:", result)

這個函式會回傳兩個值:

True 或 False:代表資料是否通過驗證。

驗證結果或錯誤訊息:讓主程式知道接下來要如何處理。

使用函式的好處是,未來新增喝水量、運動時間等欄位時,可以用相同的概念設計不同的驗證規則,讓程式更容易維護。

六、檢查日期格式

健康紀錄通常需要記錄日期,因此日期格式也必須保持一致。若日期輸入錯誤,可能會影響歷史紀錄查詢與每週統計。

Python 可以使用 datetime 模組檢查日期是否符合指定格式。

from datetime import datetime

date_input = input("請輸入日期(YYYY-MM-DD):").strip()

try:
record_date = datetime.strptime(date_input, "%Y-%m-%d")
print("日期格式正確:", record_date.date())

except ValueError:
print("輸入錯誤:請使用 YYYY-MM-DD 格式,並確認日期有效。")

例如,2026-10-23 是有效日期,但 2026-13-45 並不是有效日期,因此會觸發錯誤處理。

透過日期驗證,可以讓系統中的健康紀錄使用統一格式,降低後續排序、查詢與分析的困難。

七、今日實作步驟

今天的實作以建立基本的資料驗證能力為主,暫時不需要整合網頁介面。

建立一個 Python 程式,讓使用者輸入喝水量。

檢查輸入內容是否為空白。

使用 try...except 檢查輸入是否能轉換成數字。

拒絕負數,並針對過高的數值顯示確認訊息。

讓使用者輸入睡眠時間,並檢查數值是否介於 0 到 24 小時之間。

測試不同輸入情況,確認程式能正確顯示結果。

可以使用以下資料進行測試:

https://ithelp.ithome.com.tw/upload/images/20261023/20178903eV0Cm2f4TW.png

完成測試後,觀察程式是否能在遇到錯誤輸入時持續正常執行,而不是直接中斷。

八、今日成果與學習心得

透過今天的學習,我了解資料驗證是健康習慣追蹤系統的重要環節。除了將資料輸入程式與保存資料之外,還需要確認資料是否完整、格式是否正確,以及數值是否符合系統設定的基本條件。

今天學習了 strip()、try...except、if...elif...else、函式與日期格式檢查等概念,也練習將驗證邏輯整理成可以重複使用的函式。

這些功能能讓系統更穩定,並為後續的資料儲存、歷史紀錄查詢及健康數據分析建立更可靠的基礎。

九、下一步學習方向

第二階段到今天正式完成。接下來將進入第三階段「建立系統基本功能」。

Day 13 將學習 Streamlit 入門:建立第一個互動式網頁,把目前以終端機輸入資料的方式,逐步轉換成具有標題、文字輸入欄位與互動元件的網頁介面,讓個人健康習慣追蹤系統開始具備實際操作的雛形。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言