2017-03-03 58 views
0

我有一个学校的任务(好吧,这是额外的功劳,是确切的)我需要使用函数来检查输入的值是否是整数。 这是功能我的老师希望我们用下手:Python enterInteger函数 - 检查有效整数

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

我试着搞乱了一堆不同的代码,但无济于事。这是代码我经历过最多的运气(这是超级马虎,我知道我已经没有太大的教学编码的Python 3周左右为止。):

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

你可能想看看'try';可以使这个既简单又有效。 –

+0

你为什么使用'while'循环?你回到每一个你的分支,所以它只能迭代一次... –

回答

1

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

最直接的解决方案是删除除return int(enteredValue)之外的所有return。您还需要在循环内移动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总是返回一个整数,所以检查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() 

这仍然不满足“不能不管输入什么崩溃”的要求,虽然 - 例如,如果用户输入“你好”,或点击CTRL-C。您可能需要查看异常处理以涵盖这些情况。

+0

是的,我有一些脚本来处理字母或字符,所以这不会是一个问题。我感谢帮助的人。我似乎总是让我的Python脚本过于复杂。 – Dylan