政安晨:示例演绎Python的布尔值和条件语句

使用布尔值进行分支逻辑,是Python语言开发的必要方式。

布尔值(Booleans)

Python有一种叫做bool的变量类型。它有两个可能的值:True和False。

x = True
print(x)
print(type(x))

政安晨:示例演绎Python的布尔值和条件语句_第1张图片

        与其直接在我们的代码中放置True或False,我们通常从布尔运算符中获得布尔值。这些运算符是用来回答是/否问题的运算符。我们将在下面介绍一些这些运算符。

比较操作

操作 描述 操作 描述
a == b a 等于 b a != b a 不等于 b
a < b a 小于 b a > b a 大于 b
a <= b a 小于等于 b a >= b a 大于等于 b
def can_run_for_president(age):
    """Can someone of the given age run for president in the US?"""
    # The US Constitution says you must be at least 35 years old
    return age >= 35

print("Can a 19-year-old run for president?", can_run_for_president(19))
print("Can a 45-year-old run for president?", can_run_for_president(45))

政安晨:示例演绎Python的布尔值和条件语句_第2张图片

  “比较”通常能够达到你的期望。

3.0 == 3

政安晨:示例演绎Python的布尔值和条件语句_第3张图片

但有时候,它们(这些操作)可能会有些麻烦。

'3' == 3

比较运算符可以与我们已经看到的算术运算符结合使用,用于表示几乎无限的数学测试范围。例如,我们可以通过检查一个数与2的模余是否为1来判断该数是否是奇数:

def is_odd(n):
    return (n % 2) == 1

print("Is 100 odd?", is_odd(100))
print("Is -1 odd?", is_odd(-1))

政安晨:示例演绎Python的布尔值和条件语句_第4张图片

记得在进行比较时使用==而不是=。如果你写n == 2,你是在询问n的值。当你写n = 2时,你是在改变n的值。

合并布尔值

您可以使用“and”、“or”和“not”的标准概念来组合布尔值。实际上,用于进行组合的操作符是:and、or和not。

使用这些操作符,我们可以使我们的can_run_for_president函数(下面这个函数)更准确。

def can_run_for_president(age, is_natural_born_citizen):
    """Can someone of the given age and citizenship status run for president in the US?"""
    # The US Constitution says you must be a natural born citizen *and* at least 35 years old
    return is_natural_born_citizen and (age >= 35)

print(can_run_for_president(19, True))
print(can_run_for_president(55, False))
print(can_run_for_president(55, True))

政安晨:示例演绎Python的布尔值和条件语句_第5张图片

您刚才猜到这些表达式的值了吧?

True or True and False ?

要回答这个问题,你需要弄清楚操作的顺序。

比如,“与”运算在“或”运算之前进行计算。这就是为什么上面的第一个表达式是True。如果我们从左到右进行计算,我们首先会计算出True “or” True(结果是True),然后将结果与False进行“与”运算,得到最终的值False。

你可以试着记住运算的优先顺序,但更安全的方法是使用大量的括号。这不仅有助于防止错误,还可以让阅读你代码的人更清楚你的意图。

例如,考虑以下表达式:

为天气做准备 = 带伞 or 雨大的程度 < 5 and 带帽子 or not 雨大的程度 > 0 and 是否为工作日

我想说的是,从今天的天气来看,只要我有伞,或者雨不太大并且我有帽子,我是安全的。除非是下雨的工作日,否则我还好。

但是我的Python代码不仅难以阅读,还有一个错误。通过添加一些括号,我们可以解决这两个问题。

为天气做准备 = 带伞 or (雨大的程度 < 5 and 带帽子) or not (雨大的程度 > 0 and 是否为工作日)

如果你认为它有助于可读性,可以添加更多的括号。

为天气做准备 = 带伞 or ((雨大的程度 < 5) and 带帽子) or (not (雨大的程度 > 0 and 是否为工作日))

我们还可以将其拆分成多行,以强调上述的三部分结构。

为天气做准备 = (
    带伞 
    or ((雨大的程度 < 5) and 带帽子) 
    or (not (雨大的程度 > 0 and 是否为工作日))
)

条件语句

布尔值在与条件语句结合时最为有用,使用关键字 if,elif 和 else。

条件语句,通常被称为if-then语句,允许你基于某个布尔条件的值来控制运行哪些代码片段。这里举个例子:

def inspect(x):
    if x == 0:
        print(x, "is zero")
    elif x > 0:
        print(x, "is positive")
    elif x < 0:
        print(x, "is negative")
    else:
        print(x, "is unlike anything I've ever seen...")

inspect(0)
inspect(-15)

政安晨:示例演绎Python的布尔值和条件语句_第6张图片

if和else关键字在其他语言中经常被使用;更加独特的关键字是elif,是"else if"的缩写。

在这些条件子句中,elif和else块是可选的;此外,您可以包含任意数量的elif语句。

请特别注意使用冒号(:)和空格来表示代码的分离块。这与我们定义函数时的情况类似 - 函数头以冒号(:)结尾,下一行缩进4个空格。所有随后的缩进行都属于函数的主体,直到我们遇到一个未缩进的行,结束函数定义。

def f(x):
    if x > 0:
        print("Only printed when x is positive; x =", x)
        print("Also only printed when x is positive; x =", x)
    print("Always printed, regardless of x's value; x =", x)

f(1)
f(0)

政安晨:示例演绎Python的布尔值和条件语句_第7张图片

布尔转换

我们已经见过int()函数(它将对象转换为整数),以及float()函数(它将对象转换为浮点数),所以你可能不会感到惊讶,Python还有一个bool()函数(它将对象转换为布尔值)。

print(bool(1)) # all numbers are treated as true, except 0
print(bool(0))
print(bool("asf")) # all strings are treated as true, except the empty string ""
print(bool(""))
# Generally empty sequences (strings, lists, and other types we've yet to see like lists and tuples)
# are "falsey" and the rest are "truthy"

政安晨:示例演绎Python的布尔值和条件语句_第8张图片

我们可以在if条件和其他需要布尔值的地方使用非布尔对象。Python会隐式地将它们视为它们对应的布尔值。

if 0:
    print(0)
elif "spam":
    print("spam")

政安晨:示例演绎Python的布尔值和条件语句_第9张图片

轮到你啦

你可能没有意识到自己已经学到了多少。去试试实践性的编码问题,你会惊喜地发现你能做到多少。去尝试吧!

你可能感兴趣的:(Python语言大讲堂,python,开发语言,布尔值,条件语句,JupyterNotebook,Conda,示例演绎)