我怎样才能阻止我的python程序崩溃

问题描述:

我写了一个程序来计算一个数字的阶乘完美的工作,但当测试我输入一个浮点数时崩溃。 我的目标是接受一个浮点数,但没有计算。由于该程序将接受但返回“错误输入,只有整数被接受”。 我已经尝试了多个声明,但它只适用于我在声明中输入的数字。所以我想也许应该建立一些东西,也许可以通过命名一些花车并做某种减法。但我迷路了。 这里是程序我至今不包括浮动声明:我怎样才能阻止我的python程序崩溃

def main(): 
# take input from the user 
     num = int(input("Enter a number: ")) 
     factorial = 1 
     if num > 100: 
      print("Bad entry. It should be an integer less than or equal to 100!") 
      print("Please try again: ") 
     elif num == 0: 
      print("The factorial of 0 is 1") 
     elif num < 0: 
      print("Bad entry. It should be an integer superior than or equal to 0!") 
      print("Please try again: ") 
     else: 
      for i in range(1,num + 1): 
       factorial = factorial*i 
      print("The factorial of",num,"is",factorial) 

main() 
+2

修复身份请 – ForceBru 2015-02-06 16:40:54

+0

请参阅[这篇文章](http://*.com/questions/4541155/check-if-a-number-is-int-or-float)如何检查输入的数字是积分。 – RedX 2015-02-06 16:42:23

+0

请包括你试图解决浮点问题,以及它如何“崩溃”。你有没有捕获异常? – 2015-02-06 16:42:54

def main(): 
    # take input from the user 
    num = float(input("Enter a number: ")) 
    if (num%1 != 0): 
     print("Bad entry, only integers are accepted.") 
     return 

    num = int(num) 
    factorial = 1 
    if num > 100: 
     print("Bad entry. It should be an integer less than or equal to 100!") 
     print("Please try again: ") 
    elif num == 0: 
     print("The factorial of 0 is 1") 
    elif num < 0: 
     print("Bad entry. It should be an integer superior than or equal to 0!") 
     print("Please try again: ") 
    else: 
     for i in range(1,num + 1): 
      factorial = factorial*i 
     print("The factorial of",num,"is",factorial) 

main() 
+0

您可以添加一些解释吗?裸码块是不好的。 – 2015-02-06 16:51:53

+0

模块操作符'%'将返回操作的其余部分。所以,9%1是0,而9.1%1是0.1。一旦我们确定了它的浮点数,你可以将它转换为int。 – 2015-02-06 17:14:34

+0

似乎没有必要。你应该尝试转换为'int',并在失败时捕获'ValueError'。你在这里保存的唯一情况是,如果用户给你一个浮点数,如果他们给你一个非数字的话,它会触发一个不同的错误信息。 – 2015-02-06 17:16:43

你应该使用try/catch块,因为int('3.2')(或任何其它浮动字符串)会产生一个错误。例如:

try: num = int(input('Enter a number...')) 
except ValueError: 
    print 'We only accept integers.' 
    return 

正如许多人所建议的,你应该使用try/except块。但是,如果你想接受用户的输入像"6.12"和整数部分才算,你应该做的:

user_in = "6.12" # or whatever the result from the input(...) call is 
user_in = int(float(user_in)) # 6 

int不能在一个字符串,不是整数般的操作,但它可以在一个浮点数操作。在字符串上调用float会给你一个浮点数,并且在该浮点数上调用int将返回整数部分。