# 基础知识
# 布尔值 and
# 先做题后思考
"Boolean make the code simply"
# 1 接上一篇博文 'or',最后一题
编写一个名为is_valid_percentage的函数,接受一个数字参数x。如果x在0到100(包括)之间,它应该返回True,否则返回False。你的函数应该只使用or,并通过以下测试:
def assert_equal(actual, expected):
if actual == expected:
print("OK")
else:
print(f"Error! {repr(actual)} != {repr(expected)}")
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)
-- 1 现在来公布答案,使用逆向思维来解决,判断小于0或者大于100,如果成立则输出False,如果不成立,则输出True,当正向思维占主导位置时,我们不妨给逆向思维让让步。
def assert_equal(actual, expected):
if actual == expected:
print("OK")
else:
print(f"Error! {repr(actual)} != {repr(expected)}")
def is_valid_percentage(x):
# input your code by yourself
if x < 0 or x > 100:
return False
else:
return True
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)
# 2 开启今天的主题 'and',还是用上面这个题目开始,前面是or写的函数is_valid_percentage,现在使用and重写该函数
def is_valid_percentage(x):
if x >= 0 and x <= 100:
return True
else:
return False
-- 2 有没有跟我写的一样呢,如果有不一样的解决办法更好,当然有啊,一行搞定。
def is_valid_percentage(x):
return x >= 0 and x <= 100
def is_valid_percentage(x):
return 0 <= x <= 100
# 3 接下来,来尝试一些新东西。
给定一个包含三个元素的列表,检查三个元素是否相等。
def assert_equal(actual, expected):
if actual == expected:
print("OK")
else:
print(f"Error! {repr(actual)} != {repr(expected)}")
def all_equal(row):
...
assert_equal(all_equal(["X", "X", "X"]), True)
assert_equal(all_equal(["O", "O", "O"]), True)
assert_equal(all_equal(["X", "O", "X"]), False)
-- 3 从上一题可以很简单得出,以下是三种解题方法,每种方法的原理都有备注。
def all_equal(row):
# 直接判断每个元素是否相等
return row[0] == row [1] == row[2]
# 比较第一二位值是否与第一个相等
return row[0] == row[1] and row[0] == row[2]
# 将每个列表第一个值拿出来,组成一个新列表,与原列表相比较是否相等
return row == [row[0], row[0], row[0]]
-- 总结
and 相对于 or,使用起来更简单,更符合正向逻辑。
在使用中,区别于or逻辑是,当and两端都是True是,等式结果才是True,当等式两边有一个是False,则结果都为False。