鱼C论坛

 找回密码
 立即注册
查看: 2748|回复: 4

[已解决]这两段代码那段更高效?

[复制链接]
发表于 2022-9-12 23:00:28 | 显示全部楼层 |阅读模式

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

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

x
有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴。写一个程序,判断一个给定的点是否在这个正方形内(包括正方形边界)。

输入输入一行,包括两个整数x、y,以一个空格分开,表示坐标(x,y)。输出输出一行,如果点在正方形内,则输出yes,否则输出no。样例输入

1 1
样例输出

yes

temp = input().split()
a,b = int(temp[0]),int(temp[1])
if -1 <= a <= 1 and -1 <= b <= 1:
    print('yes')
else:
    print('no')
s=input().split()

x=float(s[0])

y=float(s[1])

if x>1 or x<-1 or y>1 or y<-1:

    print("no")

else:

    print("yes")


第一段代码我写的,判断ab同时满足条件才输出,第二段代码网上看到的,理论上if x>1 or x<-1 or y>1 or y<-1大部分情况不需要跑完就跳到else结果,这样效率更高?是吗?

而我写的and,代码必须完全跑完,理论上效率比第二段高,以后优先第二段代码这种写法??
最佳答案
2022-9-13 07:53:22

and 和 or 都有短路逻辑,只要一次条件不满足 True,即当条件为 False 时

就直接短路后续条件,返回 False,除非 and 遇到的都是 True ,就需要将所有条件全部判断完

但 or 只要有一次条件为 True ,就短路后续判断,若 or 条件一直返回 False ,那么就需要全部判断完

只是较区间来说,你是判断点是在正方形内区间,而第二段代码是判断点是在正方形外

假设坐标点在 -100, 100 这个区间,那么你的点面积只占了一小部分,绝大多数都是正方形外的点

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

使用道具 举报

发表于 2022-9-12 23:29:24 | 显示全部楼层
我们假设需要判断的点,平均分布在在由正方形四个边分割出的9个区域里面,再简化一点,每个区域有一个点。
那么第一段代码,9个点中:左侧3个点,各需要判断1次;右侧3个点,各需要判断2次;中间三个点,从上往下依次要判断4,4,3次
那么第二段代码,9个点中:左侧3个点,各需要判断2次;右侧3个点,各需要判断1次;中间三个点,从上往下依次要判断3,4,4次

在需要判断的点按照我上面说的方式平均分布时,两者效率没有本质区别。
上述两种写法,其实第一种是四个条件做且运算,第二种是四个条件做或运算,没记错的高中学过其实【两个条件做且运算的结果】等于这【两个条件做否运算后做或运算的结果在做否运算】,所以是可以相互转化的
虽然没有验证,但是我大胆猜测,上述两种写法中的条件,做或运算或者且运算的四个条件改变顺序后,当待判断点平均分不时,判断的次数依然相同。
以上~~~~
如果楼主有兴趣验证了,发现了错误,请来告知,谢谢拉~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-13 07:53:22 | 显示全部楼层    本楼为最佳答案   

and 和 or 都有短路逻辑,只要一次条件不满足 True,即当条件为 False 时

就直接短路后续条件,返回 False,除非 and 遇到的都是 True ,就需要将所有条件全部判断完

但 or 只要有一次条件为 True ,就短路后续判断,若 or 条件一直返回 False ,那么就需要全部判断完

只是较区间来说,你是判断点是在正方形内区间,而第二段代码是判断点是在正方形外

假设坐标点在 -100, 100 这个区间,那么你的点面积只占了一小部分,绝大多数都是正方形外的点

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

使用道具 举报

 楼主| 发表于 2022-9-13 17:03:43 | 显示全部楼层
lightninng 发表于 2022-9-12 23:29
我们假设需要判断的点,平均分布在在由正方形四个边分割出的9个区域里面,再简化一点,每个区域有一个点。
...

你说的思路和理论我理解不到,我先记下来以后学深了再回味下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-13 17:04:25 | 显示全部楼层
Twilight6 发表于 2022-9-13 07:53
and 和 or 都有短路逻辑,只要一次条件不满足 True,即当条件为 False 时

就直接短路后续条件,返回 F ...

我就是理解到短路逻辑那里

但你说的我第二段是判断正方形外来判断,这个我还真没想过,我以为都在判断正方形内
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 19:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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