问题描述
当我在屏幕上输入较小的数字时,它可以正常工作,但是当我输入较大的数字时,它停止工作并且不响应任何用户输入,我使用了OverflowError,但它似乎不起作用。请帮我
from tkinter import *
from tkinter import messageBox as msb
import math
root = Tk()
root.geometry("500x200")
# screen to write the number
screen_val = StringVar()
screen = Entry(root,textvariable=screen_val,font="Aerial 33")
screen.pack(fill=BOTH)
factorial_question = ""
def factorial():
global factorial_question
try:
factorial_question = screen_val.get()
if "Answer : " in screen_val.get():
factorial_question = factorial_question.replace("Answer : ","")
factorial_answer = math.factorial(int(factorial_question))
screen_val.set("Answer : " + str(factorial_answer))
screen.update()
except OverflowError:
if "Answer : " in screen_val.get():
factorial_question.replace("Answer : ","")
msb.showwarning("Error","Value too long")
except ValueError:
msb.showwarning("Error","write the correct number")
button_factorial = Button(root,text="!",font="aerial 15 bold",borderwidth=10,bg="light yellow",pady=14,padx=15,command=factorial)
button_factorial.pack()
root.mainloop()
解决方法
您需要做的是确定允许的最大数量,然后您可以编辑该函数,以便它利用ifs
来检查数量是否太大。您的try-except
未捕获错误的原因是因为没有错误,但是计算机花费在计算阶乘并在屏幕上显示大量数字的时间呈指数级增长且迅速。
基本上,使用ifs
来限制您的程序可以输入的程序数量,甚至可以添加else
来通知他们该数字太大。