Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何阻止python程序崩溃_Python_Loops_Factorial_Floating - Fatal编程技术网

如何阻止python程序崩溃

如何阻止python程序崩溃,python,loops,factorial,floating,Python,Loops,Factorial,Floating,我写了一个程序来计算一个数字的阶乘,所有的程序都工作得很好,但是当我为测试输入一个浮点数时崩溃了。 我的目标是接受一个浮点数,但不进行计算。因为程序将接受但返回类似“坏条目,只接受整数”的内容 我尝试了多个语句,但它只适用于我在语句中输入的数字。所以我想也许应该做点什么,也许可以命名一些浮点数,做一些减法运算。但是我迷路了。 这是我到目前为止没有包含浮点语句的程序: def main(): # take input from the user num = int(inpu

我写了一个程序来计算一个数字的阶乘,所有的程序都工作得很好,但是当我为测试输入一个浮点数时崩溃了。 我的目标是接受一个浮点数,但不进行计算。因为程序将接受但返回类似“坏条目,只接受整数”的内容 我尝试了多个语句,但它只适用于我在语句中输入的数字。所以我想也许应该做点什么,也许可以命名一些浮点数,做一些减法运算。但是我迷路了。 这是我到目前为止没有包含浮点语句的程序:

    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()
def main():
#从用户那里获取输入
num=int(输入(“输入一个数字:”)
阶乘=1
如果num>100:
打印(“输入错误。它应该是小于或等于100的整数!”)
打印(“请重试:”)
elif num==0:
打印(“0的阶乘是1”)
elif num<0:
打印(“输入错误。它应该是大于或等于0的整数!”)
打印(“请重试:”)
其他:
对于范围内的i(1,num+1):
阶乘=阶乘*i
打印(“的阶乘”,num,“is”,factorial)
main()

您应该使用try/catch块,因为
int('3.2')
(或任何其他浮点字符串)将引发错误。例如:

try: num = int(input('Enter a number...'))
except ValueError:
   print 'We only accept integers.'
   return
def main():
#从用户那里获取输入
num=float(输入(“输入一个数字”))
如果(数值%1!=0):
打印(“输入错误,只接受整数。”)
返回
num=int(num)
阶乘=1
如果num>100:
打印(“输入错误。它应该是小于或等于100的整数!”)
打印(“请重试:”)
elif num==0:
打印(“0的阶乘是1”)
elif num<0:
打印(“输入错误。它应该是大于或等于0的整数!”)
打印(“请重试:”)
其他:
对于范围内的i(1,num+1):
阶乘=阶乘*i
打印(“的阶乘”,num,“is”,factorial)
main()

正如许多人所建议的,您应该使用
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
将返回整数部分。

修复标识请参阅如何检查输入的数字是否为整数。请包括您试图解决浮点数问题的方法,以及它是如何“崩溃”的。您是否收到未捕获的异常?请查找
try/except
。你应该能够尝试循环,如果失败的话发送一条消息。我可能听起来很傻,但你不能计算浮点的阶乘,对吗?所以,没有理由把try/excepts放在这里,你能解释一下吗?裸代码块不正确。模块运算符“%”将返回操作的其余部分。因此,9%1是0,而9.1%1是.1。一旦我们确定了它的浮点值,你就可以把它转换成一个整数。似乎没有必要。您应该尝试转换为
int
,如果失败,则捕获
ValueError
。你在这里保存自己的唯一情况是,如果用户给你一个浮点值,它将触发一个不同于裸回溯的错误消息,如果他们给你一个非数字。如果你将浮点值转换为整数,它不会失败。它将截断数字。我建议A)转换为float,然后转换为int,并使用结果整数,无论用户输入什么,或者B)不要转换为float,因为
int(“6.2”)
会失败。
user_in = "6.12" # or whatever the result from the input(...) call is
user_in = int(float(user_in)) # 6