鱼C论坛

 找回密码
 立即注册
查看: 2052|回复: 9

[已解决]一个难以让人很困惑的错误,不知道是哪里除了问题

[复制链接]
发表于 2021-1-24 00:36:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class __A__():
        def equal(x):
                equal = x**2**0.5
                return equal
输出结果__A__.equal(-100)
           (-179.35994199180593-649.3221921940507j)
简单改一下
class __A__():
        def equal(x):
                equal = (x**2)**0.5
                return equal

       
>>> __A__.equal(-100)
100.0
结果又变为正确,说明函数本身没有出问题,但是中间的运行过程跟我想象的有些不太一样
好像运算的优先级跟四则运算不同,但是我调整了一下
>>> -100**2**0.5
-673.638848395037
直接输入的时候又是另外一个结果,三个结果,竟然完全不同,我搞蒙了,到底是哪里出问题了?
最佳答案
2021-1-24 07:46:32
本帖最后由 qq1151985918 于 2021-1-24 07:51 编辑

第一点,幂运算优先级要远远高于取负优先级,所以
  1. -100**2**0.5
复制代码
其实是
  1. -(100**2**0.5)
复制代码
你函数中的return表达式其实是
  1. (-100)**2**0.5
复制代码
因为函数中的x直接就是负数整体
第二点,python中的幂运算是右结合,也就是有多个幂运算,右边的幂优先级较高,所以
  1. -100**2**0.5
复制代码
其实是
  1. -(100**(2**0.5))
复制代码

001 (1).png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-24 07:25:02 From FishC Mobile | 显示全部楼层
虽然它是有默认顺序的,但是最好还是加括号为好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-24 07:46:32 | 显示全部楼层    本楼为最佳答案   
本帖最后由 qq1151985918 于 2021-1-24 07:51 编辑

第一点,幂运算优先级要远远高于取负优先级,所以
  1. -100**2**0.5
复制代码
其实是
  1. -(100**2**0.5)
复制代码
你函数中的return表达式其实是
  1. (-100)**2**0.5
复制代码
因为函数中的x直接就是负数整体
第二点,python中的幂运算是右结合,也就是有多个幂运算,右边的幂优先级较高,所以
  1. -100**2**0.5
复制代码
其实是
  1. -(100**(2**0.5))
复制代码

001 (1).png

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
XYcarpenter + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-24 11:30:06 | 显示全部楼层
学习了,右结合的运算符,加上括号才稳当。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-24 23:36:04 | 显示全部楼层
qq1151985918 发表于 2021-1-24 07:46
第一点,幂运算优先级要远远高于取负优先级,所以其实是你函数中的return表达式其实是因为函数中的x直接就 ...

(-179.35994199180593-649.3221921940507j)
那这个结果呢?我主要不明白这个结果是怎么出来的,好像是复数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-25 01:16:56 From FishC Mobile | 显示全部楼层
(-100)**2**0.5 == (-100)**(2**0.5)啊,上边说的还不够清楚么,再理解理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-25 09:49:27 From FishC Mobile | 显示全部楼层
一个难以让人很困惑的错误
这真的没打错?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-25 10:17:19 | 显示全部楼层
挣扎起飞 发表于 2021-1-24 23:36
(-179.35994199180593-649.3221921940507j)
那这个结果呢?我主要不明白这个结果是怎么出来的,好像是复 ...

你是不是以为2**0.5=1了……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-25 12:24:32 | 显示全部楼层
困惑终于揭开了........
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-25 12:44:49 | 显示全部楼层
qq1151985918 发表于 2021-1-25 01:16
(-100)**2**0.5 == (-100)**(2**0.5)啊,上边说的还不够清楚么,再理解理解

一时间没转过弯儿,我明白了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 07:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表