Python与或运算

今天碰到一道有意思的题目,看了之后发现自己对Python与或的理解还是欠缺,如下。
题目:求1+2+…+n
来源:Leetcode
在这里插入图片描述
如果不加限制,我们有很多方法计算该值,例如高斯公式,递归等。
我们思考下递归的解法:

    def sumNums_if(self, n: int) -> int:
        if not n: return n
        return n + self.sumNums_if(n-1)

即当n等于0的时候,开始自底向上返回。
那么,当限制了if语句的时候,我们如下实现这个判断呢?
实际上,我们可以使用and或者or运算符实现该操作,代码如下:

    def sumNums(self, n: int) -> int:
        return n and n + self.sumNums(n - 1)

and 运算符:每一项都为True,则整个表达式为True,当执行到某一个False项时,不再往后运行,直接返回False
or 运算符:与and不用的是,or运算符只要表达式中有一项为True,则整个表达式为True,即执行到某一个True项时,也不再向后执行,直接返回True
我们来看点例子:

1、二元运算

如果一个True,一个False或两个false:

return True and False # 返回False

return True or False # 返回True

如果两边都是True,则and返回右边的,or返回左边的:

return 1 or 2 # 返回1

return 1 and 2 # 返回2

2、多元运算:

从左到右,两两运算,两两运算时逻辑见上面二元运算

例如下面三句代码,第一句返回1,第二句返回3,第三句返回2

return 1 or 2 or 3 #返回1

return 1 and 2 and 3 #返回3

return 1 and 2 or 3 #返回2

我们在回头看下上面的and型递归实现,是不是豁然开朗了呢~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值