微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

验证int数在一定范围内 Python-3.x

如何解决验证int数在一定范围内 Python-3.x

我正在制作这款游戏​​,用户必须从5个选项中进行选择。因此,他必须输入1到5之间的任意数字才能选择一个选项。现在这是我面临的问题,我只是想不出用户无法输入除1到5的整数以外的任何其他字符的方式,如果他输入了错误的字符,我该怎么办?显示他的错误,然后让他再次输入?这是我尝试过的:

def validateOpt(v):
   try:
      x = int(v)
      if int(v)<=0:
         x=validateOpt(input("Please enter a valid number: "))
      elif int(v)>5:
         x=validateOpt(input("Please enter a valid number: "))
         return x
   except:
      x=validateOpt(input("Please enter a valid number: "))
      return x

validateOpt用于验证选项的编号,即1,2,3,4,5。它可以正常工作,但是每当我输入33,22、55或其他任何从1到5的其他int数两次(不是三次甚至四次,但只有两次),它都不会显示任何错误并继续前进,并且,我想是错的。我只是一个初学者。

解决方法

您可以使用while循环来完成此操作,类似的事情应该是一个好的开始:

def getValidInt(prompt,mini,maxi):
    # Go forever if necessary,return will stop

    while True:
        # Output the prompt without newline.

        print(prompt,end="")

        # Get line input,try convert to int,make None if invalid.

        try:
            intVal = int(input())
        except ValueError:
            intVal = None

        # If valid and within range,return it.

        if intVal is not None and intVal >= mini and intVal <= maxi:
            return intVal

然后用类似这样的名称来调用它:

numOneToFive = getValidInt("Enter a number,1 to 5 inclusive: ",1,5)
,

使用while循环而不是递归,您可以检查用户数据并返回其是否有效,尽管如果用户要在没有有效输入的情况下退出或退出,则可能需要考虑使用break子句。

def get_input(minimum,maximum):
    while True:
        try:
            x = int(input(f"please enter a valid number from {minimum} to {maximum}: "))
            if minimum <= x <= maximum:
                return x
        except ValueError as ve:
            print("Thats not a valid input")
            

value = get_input(1,5)
,

用于1到5之间的循环

,

尝试以下代码,它将一直提示用户输入5,请注意,如果递归太深,这可能会导致堆栈溢出:

def f():
    x = input("Enter an integer between 1 and 5:")

    try:
        x = int(x)
        if x<=0 or x>5:
            f()
    except:
       f()

f()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。