Python enterInteger函数 - 检查有效整数

时间:2017-03-03 20:04:46

标签: python python-3.x

我已经完成了学校的作业(好吧,确切地说这是额外的功劳),我需要使用一个函数来检查输入的值是否为整数。 这是我的老师希望我们开始使用的功能:

def enterInteger():
enteredValue = input(‘Please enter an Integer:’
return int(enteredValue)
  • 没有参数
  • 将返回有效的整数
  • 将循环,直到输入有效整数
  • 向用户提供关于条目错误原因的错误消息
  • 无论输入什么都不会崩溃
  • 如果它进入无限循环,它就不起作用了!

我试过搞乱一堆不同的代码,但无济于事。这是我运气最好的代码(我知道这很邋。。到目前为止,我已经编写了大约3周的Python代码而没有多少教学):

def enterInteger():
    check = 0
    enteredValue = input('Please enter an Integer: ')

    while check == 0:
        if "." in enteredValue:
            print("The entered value has a decimal! Not an integer!")
            return

        elif "\\" in enteredValue:
            print("The entered value is a fraction! Not an integer!")
            return

        elif "/" in enteredValue:
            print("The entered value is a fraction! Not an integer!")
            return
        else:
            return int(enteredValue)
            enteredValue = 0
            check = 1

check = enterInteger()

if type(check) is int:
    print("The entered value is an integer!")
else:
    enterInteger()

当我运行它并输入一个实数时,它工作正常,但如果我输入一个非整数,它不会正确进入循环。如果我输入一个非整数后跟一个整数,它也不起作用。

我将非常感谢您能得到的任何帮助!

1 个答案:

答案 0 :(得分:1)

return导致函数立即终止。你返回if-elif-else块的每个分支,所以你的循环永远不能执行多次。

最直接的解决方案是删除return以外的每个return int(enteredValue)。您还需要在循环内移动input调用,因为您希望它们在失败后重新输入值。

def enterInteger():
    check = 0

    while check == 0:
        enteredValue = input('Please enter an Integer: ')
        if "." in enteredValue:
            print("The entered value has a decimal! Not an integer!")
        elif "\\" in enteredValue:
            print("The entered value is a fraction! Not an integer!")

        elif "/" in enteredValue:
            print("The entered value is a fraction! Not an integer!")
        else:
            return int(enteredValue)
            enteredValue = 0
            check = 1

check = enterInteger()

if type(check) is int:
    print("The entered value is an integer!")
else:
    enterInteger()

还有一些改进:return之后的代码没有多大意义,因为它永远不会被执行,因此您也可以删除enteredValue = 0check = 1。由于check现在总是为零,所以你也可以使循环无条件。并且enterInteger总是返回一个int,所以检查check是一个整数是没有意义的。

def enterInteger():
    while True:
        enteredValue = input('Please enter an Integer: ')
        if "." in enteredValue:
            print("The entered value has a decimal! Not an integer!")
        elif "\\" in enteredValue:
            print("The entered value is a fraction! Not an integer!")
        elif "/" in enteredValue:
            print("The entered value is a fraction! Not an integer!")
        else:
            return int(enteredValue)

check = enterInteger()

但是仍然不满足“不管输入什么都不会崩溃”的要求,例如,如果用户输入“Hello”,或者命中ctrl-C。您可能需要查看异常处理以涵盖这些情况。