簡體   English   中英

在 Python 中檢查多個輸入的有效性

[英]Checking multiple input's validity in Python

我寫了一個程序,在烏龜中繪制一個凸正多邊形(給定邊數和長度)。 我還希望它檢查無效輸入,以便它會立即詢問用戶是否想嘗試不同的輸入。 有沒有辦法用更少的代碼檢查輸入的有效性,同時還要考慮 ValueError?

此外,每次成功運行后都會發生 Terminator 錯誤。 可能是什么原因造成的,在使用此導入命令時有沒有辦法修復它?

from turtle import *
def inp():
    while True:
        try:
            n = int(input("Enter the number of sides of the polygon: "))
        except ValueError:
            y_n = input("Invalid input, type \"y\" if you'd like to try again: ")
            if y_n == "y":
                continue
            else:
                print("Goodbye!")
                break
        if n >= 3:
            pass
        else:
            y_n = input("Invalid input, type \"y\" if you'd like to try again: ")
            if y_n == "y":
                inp()
            else:
                print("Goodbye!")
                break
        
        try: 
            l = float(input("Enter the length of the side in pixels: "))
        except ValueError:
            y_n = input("Invalid input, type \"y\" if you'd like to try again: ")
            if y_n == "y":
                continue
            else:
                print("Goodbye!")
                break
        if l > 0:
            for i in range(1, n + 1):
                forward(l)
                left(360/n)
            exitonclick()
            break
        else:
            y_n = input("Invalid input, type \"y\" if you'd like to try again: ")
            if y_n == "y":
                inp()
            else:
                print("Goodbye!")
                break
     
inp()

對於有效的參數輸入,這里有一些步驟:

  • 從無效的值開始
  • 使用 while 循環,要求用戶提供有效的輸入
  • 如果輸入有效,則退出循環

在您的代碼中,兩個參數都具有相同的驗證檢查,因此您可以使用函數來檢查兩者。

試試這個代碼:

from turtle import *

def validnum(nm):
    return str(nm).isdigit() and int(nm) > 0  # integer and greater than zero

def inp():
    n = l = ''  # both invalid
    while not validnum(n):  # loop first entry until valid
        n = input("Enter the number of sides of the polygon or 'q' to quit: ")
        if n == 'q':
            print("Goodbye!")
            exit()
        if not validnum(n):
            print("Invalid entry")
            
    while not validnum(l):  # loop second entry until valid
        l = input("Enter the length of the side in pixels or 'q' to quit: ")
        if l == 'q':
            print("Goodbye!")
            exit()
        if not validnum(l):
            print("Invalid entry")
            
    n, l = int(n), int(l)  # convert entries to integers
            
    for i in range(1, n + 1):
        forward(l)
        left(360/n)
    exitonclick()

inp()            

由於這兩個參數具有相同的驗證,僅在消息提示方面有所不同,因此您可以通過將提示放在列表中來使代碼更加緊湊。

from turtle import *

def validnum(nm):
    return str(nm).isdigit() and int(nm) > 0  # integer and greater than zero

def inp():
    lstinp = ['','']  # both invalid
    lstmsg = ['Enter the number of sides of the polygon', 'Enter the length of the side in pixels'] # both msgs

    for i in range(len(lstinp)):  # each input value
        while not validnum(lstinp[i]):  # loop until valid entry
            lstinp[i] = input(lstmsg[i] + " or 'q' to quit: ")  # msg 
            if lstinp[i] == 'q':
                print("Goodbye!")
                exit()
            if not validnum(lstinp[i]):
                print("Invalid entry")
                        
    n, l = int(lstinp[0]), int(lstinp[1])  # convert entries to integers
            
    for i in range(1, n + 1):
        forward(l)
        left(360/n)
    exitonclick()

inp()            

運行代碼時我沒有收到任何錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM