【问题标题】:Checking multiple input's validity in Python在 Python 中检查多个输入的有效性
【发布时间】:2020-12-25 03:27:42
【问题描述】:

我编写了一个在海龟中绘制凸正多边形的程序(给定边数和长度)。我还希望它检查无效输入,这样它会立即询问用户是否想尝试不同的输入。有没有办法在更少的代码中检查输入的有效性,同时也考虑 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()

【问题讨论】:

    标签: python python-3.x loops turtle-graphics valueerror


    【解决方案1】:

    为了有效的参数输入,这里有一些步骤:

    • 以无效值开头
    • 使用 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()            
    

    运行代码时我没有收到任何错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      • 2012-10-11
      • 2019-02-06
      • 2014-12-20
      相关资源
      最近更新 更多