首頁 > 後端開發 > Python教學 > 如何確保我的程式中的使用者輸入有效?

如何確保我的程式中的使用者輸入有效?

Mary-Kate Olsen
發布: 2024-12-27 06:01:09
原創
623 人瀏覽過

How Can I Ensure Valid User Input in My Program?

請求使用者輸入直到提供有效回應

在程式設計中,在進行進一步操作之前確保使用者輸入有效至關重要。如果接受無效數據,可能會導致錯誤結果或程式崩潰。讓我們探索處理使用者輸入驗證和防止錯誤的有效技術。

異常和循環

一種方法是使用 try 和 except 區塊來捕獲以下情況下可能出現的錯誤:解析使用者輸入。將輸入解析操作封裝在 while 迴圈中,您可以連續請求輸入,直到滿足所需的條件。

while True:
    try:
        age = int(input("Please enter your age: "))
    except ValueError:
        print("Sorry, I didn't understand that.")
        continue
    else:
        break
登入後複製

自訂驗證邏輯

此外對於異常處理,您可以實作自己的驗證規則來檢查輸入。例如,您可以拒絕負數或超出特定範圍的值。

while True:
    data = input("Pick an answer from A to D:")
    if data.lower() not in ('a', 'b', 'c', 'd'):
        print("Not an appropriate choice.")
    else:
        break
登入後複製

所有情況的錯誤處理

對於全面的輸入驗證,您可以組合在單一循環中使用自訂規則進行異常處理。這可以確保正確檢測和處理解析錯誤和無效值。

while True:
    try:
        age = int(input("Please enter your age: "))
    except ValueError:
        print("Sorry, I didn't understand that.")
        continue

    if age < 0:
        print("Sorry, your response must not be negative.")
        continue
    else:
        break
登入後複製

封裝和可重複使用函數

如果您經常遇到用戶輸入驗證的需要,將相關程式碼封裝到單獨的函數中是有好處的。這允許程式碼重複使用並簡化輸入收集過程。

def get_non_negative_int(prompt):
    while True:
        value = int(input(prompt))
        if value >= 0:
            break
    return value

age = get_non_negative_int("Please enter your age: ")
登入後複製

可擴充性和通用輸入驗證

透過進一步擴充概念,您可以建立一個高度多功能輸入驗證功能,涵蓋範圍廣泛

def sanitised_input(prompt, type_=None, min_=None, max_=None, range_=None):
    while True:
        ui = input(prompt)
        try:
            if type_ is not None:
                ui = type_(ui)
        except ValueError:
            continue

        # Perform further validation checks and return valid input if all criteria are met.
登入後複製

常見陷阱和最佳實踐

  • 避免冗餘輸入語句:使用多個輸入語句來實現驗證是糟糕的程式設計風格會增加以下可能性:錯誤。
  • 避免遞歸:雖然遞歸對於輸入驗證似乎很誘人,但它可能會導致堆疊溢出,尤其是在無效輸入過多的情況下。
  • 贊成循環以實現高效處理: 使用 while 循環可以透過連續請求輸入直到收到有效回應來實現高效的錯誤處理已收到。

以上是如何確保我的程式中的使用者輸入有效?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板