Python----布尔值上篇之‘or’

# 基础知识

# 布尔值or

# 先做题后思考

"Boolean make the code simply"

# 1 以下函数判断三个人是否都是你的队友。请使用or(布尔运算符)来替换函数体中代码,使代码看起来更简洁。

def is_teammate(name):
    if name == "Alice":
        return True
    elif name == "Bob":
        return True
    else:
        return False

assert_equal(is_teammate("Alice"), True)
assert_equal(is_teammate("Bob"), True)
assert_equal(is_teammate("Charlie"), False)

-- 1 输出应该是三个OK,如果看过我之前的文章Python ---- ‘return’ 结束函数调用,就知道assert_equal是干嘛的。

# replace
if name == "Alice":
    return True
elif name == "Bob":
    return True

# with
if name == "Alice" or name == "Bob":
    return True

 -- 1 替换后代码看起来更简洁,功能没变。or是一个布尔运算符,两个布尔值(True或False)。如果A或B中的一个为真,即A为真或B为真,或两者都为真,则表达式A或B为真。只有当A和B都不为真,即都为假时,它才为假。

        代到代码中,原本是先判断name是否等于"Alice",如果不等于也就是比较结果返回False,则代码继续判断是否等于"Bob",也不等于则同样返回False,则代码走到else,最后判断是否等于"Charlie"。读到这里你是否跟我一样有个问题,如果判断name等于"Alice",结果是相等也就是返回True,是否还会判断name等于"Bob",答案是不会的,因为return直接就中断函数执行,将True返回给函数。这也就是我们这篇"猪脚"--or 的运算真谛,or 运算符左边的式子如果返回True,则不会继续运算右边的式子,返回True则你可以认为or会用return把运算终结。(记住这里,考试会考)

# 2 连接上一题,因为有些童鞋可能会想,既然让代码更简洁,那么下面这个代码还能怎么变。

def is_teammate(name):
    if name == "Alice" or name == "Bob":
        return True
    else:
        return False

assert_equal(is_teammate("Alice"), True)
assert_equal(is_teammate("Bob"), True)
assert_equal(is_teammate("Charlie"), False)

-- 2 让我们来分析下这几行代码

name == "Alice" or name == "Bob"

你有没有注意到上面这行核心代码,是一个布尔值,并且两个return语句都返回布尔值True或False:

  • returns True when name == "Alice" or name == "Bob" is True, and
  • returns False when name == "Alice" or name == "Bob" is False.

因此,在这两种情况下,我们可以简单地返回布尔值 name ==“Alice” or name ==“Bob” 本身!

这是简化代码的常用模式。如果你曾经发现自己在写这样的代码:

if x:
    return True
else:
    return False

其中x本身是一个布尔值(要么是True,要么就是False),你再观察这段代码,最终返回的也是True或者False,所以你可以将这段代码简化为:

return x

 最终结果是:

def is_teammate(name):
    return name == "Alice" or name == "Bob"

# 3 到这里要特别小心,因为这里会有坑🕳等着你。有些童鞋会说,这段代码在英语中表示的含义是,返回的name是否就等于“Alice”或“Bob”,如果是就返回True,不是就返回False,听上去蛮有道理,但当你运行代码,就会报错。

def is_teammate(name):
    return name == "Alice" or "Bob"

assert_equal(is_teammate("Alice"), True)
assert_equal(is_teammate("Bob"), True)
assert_equal(is_teammate("Charlie"), False)

 -- 3 运行结果。

OK
Error! 'Bob' != True
Error! 'Bob' != False

-- 怎么会返回Bob,而不是True呢。因为or是一个布尔运算符,所以两边必须都是布尔值(这样等式才能成立)。在上面的代码中,当运行到Bob时,左边返回False,那么现在等式是这样子,

reuturn False or "Bob" 

-- 进一步解释当or左边是False,则会继续执行右边,那么看起来是这样

return "Bob"

-- 所以就返回了Bob,而不是True。

# 4 接下来给大家出个题,题目如下:

        编写一个名为is_valid_percentage的函数,接受一个数字参数x。如果x在0到100(包括)之间,它应该返回True,否则返回False。你的函数应该只使用or,并通过以下测试:

def is_valid_percentage(x):
    # input your code by yourself

assert_equal(is_valid_percentage(-1), False)
assert_equal(is_valid_percentage(0), True)
assert_equal(is_valid_percentage(50), True)
assert_equal(is_valid_percentage(100), True)
assert_equal(is_valid_percentage(101), False)

-- 4 输出结果应该是五个OK

OK
OK
OK
OK
OK

        独立完成,多思考,答案下篇给出,谢谢。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值