我已经完成了学校的作业(好吧,确切地说这是额外的功劳),我需要使用一个函数来检查输入的值是否为整数。 这是我的老师希望我们开始使用的功能:
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()
当我运行它并输入一个实数时,它工作正常,但如果我输入一个非整数,它不会正确进入循环。如果我输入一个非整数后跟一个整数,它也不起作用。
我将非常感谢您能得到的任何帮助!
答案 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 = 0
和check = 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。您可能需要查看异常处理以涵盖这些情况。