Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python的eval()会忽略不连续性?

Python的eval()会忽略不连续性?
EN

Stack Overflow用户
提问于 2019-12-10 09:54:43
回答 2查看 217关注 0票数 0

我正在构建一个Python计算器,通过使用y解决eval(function at x)绘制函数,直到我使用一个带有可移动间断的函数为止。与其返回类似于NaN的内容,eval只是计算如果它是连续的话,该点会是什么。

例如,如果我计算(x-2)/((x^2)-4),在x=2上函数在技术上应该是未定义的,但是使用x=2返回0.25而不是NaN,这就是如果函数是连续的(技术上是极限)的值。

有没有办法让我解决这个问题,找出任何可移除的不连续性?本质上,如果分母为零

带代码的编辑:

代码语言:javascript
运行
AI代码解释
复制
COMPUTATION_DISTANCE = 0.001
# THE DISTANCE BETWEEN EACH X VALUE WHEN PLOTTING POINTS. EVENTUALLY WE CONNECT A LINE BETWEEN ALL POINTS SEPERATED BY A VALUE OF COMPUTATION_DISTANCE.
# IF THE GRAPH IS ZOOMED,  MULTIPLY THIS COMPUTATION DISTANCE BY A FACTOR OF THAT ZOOM
ASYMPTOTE = 2.0

#formula = "(x+2)**2" #just a fake formula to begin
formula = "(x-2)/((x**2)-4)" #just a fake formula to begin
view_size = 8.0




    def draw_graph(event):
        global alreadyGraphedDeriv #to prevent infinite loop of graphing deriv
        alreadyGraphedDeriv = False
        canvas.delete("all") #clear existing graph
        draw_grid()
        y_previous = 0.0
        x = view_size * -1 #start at the negative of the view_size. so x =-8. then the loop wil keep repeating until x =+8 giving u all the x values. the loop takes care of the y values
        while x <= view_size:
            try: 
                y = eval(formula) #evaluate y at every point x
                print(str(x) + ", " + str(y))
                #if(y>1000000000000 or y < 1000000000000): #finding asymptotes
                    #print("Asymptote at (" + str(x) + ", " + str(y) + ") ")

            except ValueError:
                y = 1000000000
                x = COMPUTATION_DISTANCE * view_size
                print('Value error')
                if eval(formula) < 0:
                    y *= -1
            except:
                print_formula("SYNTAX ERROR   ")
                print("syntax error")
                break
            try:
                draw_line(x - COMPUTATION_DISTANCE * view_size, y_previous, x, y, "black") #(previous x, previous y, new x, new y, color)
            except:
                print_formula("NON-INT PWR (dbl click ^)   ")
                break
            y_previous = y
            x += COMPUTATION_DISTANCE * view_size
            #print(" " + str(x - COMPUTATION_DISTANCE * view_size) + " " + str(y_previous) + " " + str(x) + " " + str(y) +  " black") 
            #(previous x, previous y, new x, new y, color)

        if alreadyGraphedDeriv is False:
            alreadyGraphedDeriv = True
            draw_derivative("event")

看看突出显示的输出。评价了0.25作为x=2的解决方案。

EN

回答 2

Stack Overflow用户

发布于 2019-12-10 10:27:45

打印的y值的数字截止值表明您在Python2上。(Python3将显示更多的数字。)

在Python2上,printing或str-ing比Python3更激进地截断浮点数,因此不完全2.0的值仍然可以显示为2.0。您的x实际上不是2.0,因为累积的舍入错误,所以您的除法并不完全是0/0。它将一个非常小的数字除以一个非常小的数,而舍入误差恰好是计算出来的,所以输出是0.25或非常接近。

如果您使用print(repr(x))而不是print(str(x)),您将看到足够多的数字使舍入错误变得明显。

另外,获取Python 3。

票数 2
EN

Stack Overflow用户

发布于 2019-12-10 11:09:17

这是个有趣的问题。它不能用纯Python来解决--为了正确处理不连续,你需要对表达式做一些代数分析。当然,您可以编写一些函数来实现这一点,但是使用现有的系统(如Sympy (https://sympy.org) )可能会方便得多。

您可能希望在表达式中查找要绘制的不连续性,使用人类使用的任何启发式方法,例如在分母中查找子表达式,并查看它们在任何地方是否为零。另外,您还想看看是否有任何不连续性是可移动的(因为x=2 in (x-2)/ (x **2-4)是可移动的,因为您可以通过让结果= 1/4在x=2处产生连续函数)。最后,您将分别绘制不连续之间的每个段。

总之,这听起来是个伟大的项目。也许像这样的智能绘图仪可以为Sympy或其他项目做出贡献,如果他们还没有的话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59272909

复制
相关文章
python 的eval()函数
主要参考:https://blog.csdn.net/chowyoungyoung/article/details/78879926
用户7886150
2020/12/22
1.2K0
Python - eval()
eval 的作用域就是 g 指定的这个字典,外面的 x = 10 被屏蔽掉了,eval 是看不见的,所以使用了 x 为 5 的值
小菠萝测试笔记
2021/09/14
9180
gitignore不忽略指定文件
背景 在使用腾讯 IMSDK 时, 通过Pod依赖了对应的库, Pods 文件夹在.gitignore中配置忽略, 但是需要修改IM SDK 的源代码, 又怕重新安装后被覆盖, 所以想要针对 腾讯
莫空9081
2023/02/15
3.4K0
python compile、eval、
    compile()函数允许程序员在运行时刻迅速生成代码对象,然后就可以用exec 语句或者内建函数eval()来执行这些对象或者对它们进行求值。一个很重要的观点是:exec 和eval()都可以执行字符串格式的Python 代码。当执行字符串形式的代码时,每次都必须对这些代码进行字节编译处理。compile()函数提供了一次性字节代码预编译,以后每次调用的时候,都不用编译了。
py3study
2020/01/09
1.4K0
python会忽略pass语句吗_Python 为什么要有 pass 语句?
关于 Python 中的pass语句,它似乎很简单(只有 4 个字母),即使是没有任何编程经验的初学者也能很快地掌握它的用法。
用户7886150
2021/01/22
1.5K0
Python 中property & eval()的妙用
学习过Java 编程语言的小伙伴,应该都知道在Java 语言学习过程中会学到类属性的getter & setter 方法。那么在Python 中是否也有类似的方法呢?答案是,有的。
Wu_Candy
2022/07/04
5840
Python eval 函数妙用
语法: eval(source, globals, locals) -> value
周小董
2019/03/25
8880
你可能会忽略的 Git 提交规范
如果你有一个项目,从始至终都是自己写,那么你想怎么写都可以,没有人可以干预你。可是如果在团队协作中,大家都张扬个性,那么代码将会是一团糟,好好的项目就被糟践了。不管是开发还是日后维护,都将是灾难。
ITer.996
2019/08/28
4800
你可能会忽略的 Git 提交规范
作者:Jartto's blog 来源:http://jartto.wang/2018/07/08/git-commit/?hmsr=toutiao.io&utm_medium=toutiao.io&
程序猿DD
2018/07/31
3260
python3 eval()函数
eval()函数十分强大,官方demo解释为:将字符串str当成有效的表达式来求值并返回计算结果。
py3study
2020/01/03
1.1K0
Python中被忽略的else
else, 我们再熟悉不过了。对于一个python程序员来说,else往往都是配合if来使用的,像这样:
Python中文社区
2018/07/26
7270
你可能会忽略的 Git 提交规范
一直是 ESLint 的忠实用户,深知规范的重要性。然而,在新项目交接中,我被 Git Commit 规范逼疯了。才意识到自己的疏忽,于是便有了一探究竟的想法。
DevOps时代
2018/08/01
3330
你可能会忽略的 Git 提交规范
Python eval安全案例
关于Python的eval函数, 大家一致的避免使用。 但有时候必须使用, 怎么保证安全呢? 下面我用一个案例来避免eval潜在的风险。 当然这只是其中的一种。
用户1416054
2018/08/02
1.1K0
Python - eval 和 exec 函数
Python 支持通过 eval 函数执行字符串命令,本文记录相关内容。 eval eval() 函数用来执行一个字符串表达式,并返回表达式的值。 语法 以下是 eval() 方法的语法: eval(expression[, globals[, locals]]) 参数 expression – 表达式。 globals – 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。 locals – 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。 示例 a="[1,2,3,4,5]"
为为为什么
2022/08/04
8000
深度辨析 Python 的 eval() 与 exec()
Python 提供了很多内置的工具函数(Built-in Functions),在最新的 Python 3 官方文档中,它列出了 69 个。
程序员小新
2021/12/30
6140
深度辨析 Python 的 eval() 与 exec()
Python 提供了很多内置的工具函数(Built-in Functions),在最新的 Python 3 官方文档中,它列出了 69 个。
Python猫
2019/04/09
6690
python之exec,eval,exe
exec语句将字符串str当成有效Python代码来执行.提供给exec的代码的名称空间和exec语句的名称空间相同.exec语句用来执行储存在字符串或文件中的Python语句。例如,我们可以在运行时生成一个包含Python代码的字符串,然后使用exec语句执行这些语句
py3study
2020/01/07
7820
Python 中被忽略的 else
来源:Python中文社区 ID:python-china else, 我们再熟悉不过了。对于一个python程序员来说,else往往都是配合if来使用的,像这样: a = '12'if a == '123': print(a)else: print('出错了!') 但是,python中的else并不只能用在if之后,so,这次我们讨论一下Python流程控制中的else。 else子句不仅能在if 语句中使用,还能在 for、while 和 try 语句中使用,这个语言特性不是什么秘密,但却
小小科
2018/06/20
6470
eval在python中是什么意思_如何在Python中使用eval ?
在Python中,我们有许多内置方法,这些方法对于使Python成为所有人的便捷语言至关重要,而eval是其中一种。eval函数的语法如下:
全栈程序员站长
2022/11/17
3.5K0
python中eval的用法「建议收藏」
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说python中eval的用法「建议收藏」,希望能够帮助大家进步!!!
Java架构师必看
2022/02/12
1.7K0
python中eval的用法「建议收藏」

相似问题

Msbuild忽略连续性错误?

22

为什么会忽略eval()代码中的语法错误?

22

python eval忽略了本地,并寻找全局的

14

如何消除windrose pcolormap绘图python上的不连续性

12

捕捉函数的不连续性

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档