用户使用python输入,并检查输入是否符合特定条件

时间:2019-11-02 18:27:41

标签: python-3.x

描述:编写一个不带参数的函数task_4_1。调用时,提示用户输入字符串“请输入您的入学编号:”。首先删除前导和尾随空格。然后使用内置功能检查输入是否为整数。 如果输入的不是数字,则输出以下内容:“无效的输入。不是数字……” 如果输入是有效整数但大于(或等于) 12000000,输出以下内容:“无效输入。无效的入学编号……” 重复要求用户使用上面的提示输入他们的入学编号。 用户输入有效数字后,您的函数应将其返回(转换为实际整数)

我的问题是“如果输入是有效整数,但大于(或等于)12000000,输出...”,这不是我编写此条件的方式,它会产生一个错误,指出“'> = ''在'str'和'int'的实例之间不支持”,而且我不知道如何使其以正确的方式工作。.

import string
def task_4_1():
    num = input("Please enter your matriculation number: ")
    if(num.isdigit()):
        return(int(num.strip()))
    elif num>=12000000:
        print("Invalid input. Not a valid matriculation number...")
        num = input("Please enter your matriculation number: ")
    else:
       print("Invalid input. Not a valid matriculation number...")

2 个答案:

答案 0 :(得分:0)

您使用if条件的顺序错误。 大于12000000的数字也是“数字”,因此始终满足第一个条件,而从不执行第二个条件。这是正确的代码,可以递归解决再次请求输入的问题。

import string
def task_4_1():
    num = input("Please enter your matriculation number: ")
    if(num.isdigit()):
        n = (int(num.strip()))
        if n >= 12000000:
            print("Invalid input. Not a valid matriculation number...")
            task_4_1()
        else: 
            return(n)
    else:
       print("Invalid input. Not a valid matriculation number...")
       task_4_1()

答案 1 :(得分:0)

还有另一种方法……while循环样式可返回选中输入的结果(如果是数字)。在所有其他情况下,它会一直循环播放,直到您提供的数字在设置的数字范围内为止。


import string, time

result = 0   # arbitrary value for variable chosen. You might want -1 or something else?

def task_4_1(result):

    while result == 0:

        num = input("Please enter your matriculation number: ")

        if(num.isdigit()):

            n=(int(num.strip()))

            if 0 < n < 12000000:   # digit selection parameters "0" and "12000000".
                result = n

            else:
                print ("Invalid input. Not a valid matriculation number...")
                time.sleep(2)  # pausing 2 seconds for reading comment and think about next try.


    print ("The result is %s which is a valid matriculation number" % result)

task_4_1(result)