返回数学错误(除以0等),否则会导致方法崩溃

2021-04-12 00:43:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个简单的Python练习:要求用户提供一个数学公式f(x),然后对其进行计算,以找到x=0和x=10之间的x的最小/最大值,采样率为x/100。我写的代码如下:

from math import *

def compute_min_and_max():
    Fx = input("what is the desired function of x?" )

    listY = []

    for i in range(0,1001):
        x = i/100
        y = eval(Fx)
        listY.append(y)

    print("This function's minimum value is", min(listY))
    print("This function's maximum value is", max(listY))   

它工作正常,除非用户要求一个类似log(x)的公式,它返回一个域错误(对于x=0)或1/(x-a)(当a=x时返回除以0的错误)。在这些情况下,我如何向用户返回一个文本字符串,通知他们间隔中没有最小值/最大值(或者,当log(x)的情况一样,存在最大值而不是最小值时,如何打印最大值?)在

3条回答
网友
1楼 ·

用try:except:else:block包装语句

Fx = input("what is the desired function of x?" )
listY = []

try:
    for i in range(0,1001):
        x = i/100
        y = eval(Fx)
        listY.append(y)
except ZeroDivisionError:
    print("Divide by zero error for f({})".format(x))
except ValueError:
    print("Invalid value for f({})".format(x))
else:
    print("This function's minimum value is", min(listY))
    print("This function's maximum value is", max(listY))

我不知道当你有未定义的结果时,如何定义最小值或最大值。您可以使用未定义结果周围的限制来了解接近未定义值的方向。
但是,如果只想返回定义的最小值或最大值,可以将try块移动到for循环中,例如:

^{pr2}$
网友
2楼 ·

只需在for循环之前添加一个if条件并检查x是否为0。 如果x=0,则只打印一个文本字符串,否则运行for循环并打印结果。在

from math import *

def compute_min_and_max():
    Fx = input("what is the desired function of x?" )

    listY = []

    for i in range(0,1001):
       x = i/100
       y = eval(Fx)
       listY.append(y)
      if x = 0:
        print('divided by zero')
      else:
        print("This function's minimum value is", min(listY))
        print("This function's maximum value is", max(listY)) 
网友
3楼 ·

这是python应该使用的异常处理。例如:

try:
  foo = 1/0
# catch a specific error
except ZeroDivisionError:
  foo = 0
  print("Division by zero")
# catch all
except Exception as err:
  foo = None
  print("Something really bad happened:", err)

在您的例子中,您应该将start/end值包装在一个try: ... except: ...中,以确定函数是否定义在极端值。在

注意,通过抽样检查任意函数是否存在最大/最小值可能是不可能的!任何+/-inf值可能位于您根本不采样的任意点。在

相关问题